忍者ブログ
natsuの秘密基地です
はまり
はまり一件ごとのお話の流れです
カレンダー
04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
プロフィール
HN:
natsu
性別:
男性
趣味:
酒など
自己紹介:
ここに書かれていることはフィクションです。
ブログ内検索
アクセス解析
[1] [2] [3
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

オブジェクトをインスタンス化してメソッドを呼び出すところまではうまくいった。
例えば、一番シンプルな、関数の形。
リターンしないようなメソッド。つまり、戻り値の型はvoid。
引数も受け取らない。
 
def test(self)
 
こういうのは普通に呼び出せる。
ちなみに、引数の一つ目は必ずselfが渡されてくる。
これは暗黙に渡されるので呼び出し時は必要ない。
だから、

[testObject test]

って呼び出せば、勝手にselfがやってくる。
この場合はtestObjectがselfになって渡されてくる。
 
 
 
でも、こういう奴。
 
def setRate_(self, newRate):
 
Objective C風にいうと、

-(void) setRate:(float)newRate;

とかだと呼び出しがうまくいかない。
 
 
 
なんか、
@objc.signature
objc.selector
でメソッドの宣言をしなきゃいけないっぽい。
 
 
 
私は@objc.signatureでうまいこといかなかったんで、
objc.selectorを使ったけど、@objc.signatureのほうが新しいらしい。
で、さっきのsetRateだと、
 
def setRate_(self, newRate):
self._rate = newRate
setRate_ = objc.selector(setRate_, signature='v@:f')
 
っていう感じの定義になった。

だれがどうみても、
signature='v@:f'がくせもの、っていう雰囲気が伝わってくる。

ちなみにself._rateのアンダースコアは何も考えずにつけてるんで、
(意図的には)意味は無い。
 
 
 
どうやら、
 
[v]oidの戻り値
@第一引数はオブジェクト(self)
:区切り(Objective Cで見慣れてるあれ)
f第二引数はfloat
 
っていう意味らしい。
じゃあ、
def getTrue(self, intValue, objectValue)
return true
だと、
B@:i:@
なのか。
試してないけど。

っていうか、Pythonにtrueなんてあったか?


 
ちょっとこの辺はまた試してみるよ。ってことで。
文字列の扱いが気になるし。
でも、それはまた明日以降に。
今日は背中がぐきっ、ってなってパソコン打つのがちょっと辛い。
すこし横になろう。実は今日はなんも出来てない。 
 
 
ちなみに、変数名の_rateのアンダースコアはなんも考えずにやってたけど、
関数名のアンダースコアは重要らしい。':'の代わりなんだって。

-(void) addURL:(NSString *)url fileName:(NSString *)name;

だったら、

def addURL_fileName_(self, url, name);

みたいな。
 
PR
さてと。なにをするのがいいのか。というところで。
Currency Converterのチュートリアルで作ったものを基にして、
なんかすれば、何となく何をどうやればどうなるのかというのが、
おぼろげにも解るような気がした。
 
 
要するにCurrency Converterです。
 
 
とりあえず目標として、MVCでしたっけ、
あれのMをPythonのコードで置き換える、というのは妥当だと思う。
目標としてね。
 
 
自分、ひとによるとMらしいしね。
 
 
つまるところ、Converter.mとConverter.hが、
Converter.pyになればOK。
 
 
ただまあ、PyObjC。
サンプルかきあつめてね、いろいろ見る限りでは初期化がいるみたいなんですねぇ。
なんか、main.pyをたてて、そこでいろいろimportするらしい。
ちなみに自分の使いたいクラスもここでimportしちゃえばいいっぽい。
私の場合はimport Converterって最後の方でいっちゃえばいい。
 
で、そのmain.pyをObjective Cのコードのどっかで走らせればいい。
私はmain()から初期化関数よびだし!でやっちゃったよ。
 
 
ただなんか、ね。その初期化でうまくいかない。
で、新規でプロジェクトたてて、初期化のみを行うプログラムを作ると、
こいつは初期化がうまくいく。
 
なんでだってことで、Currency Converterをまた一から作り直してみる。
ただし、Converter.pyとPyObjCの初期化は最初から入れておく。
 
作ってくと初期化が失敗するフェイズに突き当たった。
 
Currency Converterやってみた人はわかると思うけど、
alloc initしたのにreleaseしないコードを書かせるところがあるでしょ。
で、その後ガベージコレクタ設定を有効にするくだり。
 
 
ガベージコレクタがナウいんだぜ。HAHAHA。なとこ。 
 
 
ここで落ちますよ。と。
 
 
 
 
あと、初期化がうまくいってもコンソールにwarningがでまくり。
ターゲットを10.6から10.5にすると落ち着いた。
まあ、10.6でやる理由もいまんとこないし。
 
ガベージコレクタと10.5が
昨日のラッキーワード・ラッキーナンバーだったみたいだということに、
日付が変わる前に気づいた昨日という日。
 
 
ブログのデザインがまだいい加減なんで、コードはデザインが決まったら貼るということで。
今のじゃ見にくくなる気がする。
 
3列は譲りませんよ。あこがれだったもんで。
 
まあ、まだ自分の今やってることも落ち着いてないんで、またおいおい。
まだだれも見てないし、大丈夫大丈夫。
 
 
 
引き続き、はまっていくことにする。
 
 
PyObjCが動いてるかどうか見る。
pythonをうごかして、
>>>import objc
 
エラーが出るのでどうも調子が悪い。
 
sudoせずに
 
easy_install -UZ pyobjc
easy_install -UZ pyobjc-framework-DictionaryServices
 
 
なんか
>>>import objc
は動くようになったけど、
環境がだいぶ汚れているような気がする。
Xcodeでプロジェクトにフレームワークを追加しようとしたら、
pythonのフレームワークが二つ出るし。
 
 
これはPythonの2.6.5をいれたからか。
PyObjCを入れたりしたからか。
なんかしたような気がするが思い出せない。
いろいろしすぎた。
 
 
 
でも、きっと、たぶんPyObjC。
とりあえず、もとあったのをリネームしておく。
/System/Library/Frameworks/Python.framework
のやつ。
 
しかし、PyObjC。
私、英語読めないくせに、サイトのニュースをよく見ると。
・PyObjC 2.2 でたよ
・easy_install pyobjc==2.2で入れてね
・py2appは手動でいれてね
・ただし2.2を入れるのはおすすめしないよ
・開発用だし
みたいな。
 
 
ベータは外れたけど、
ベータなんですね。
 
 
リネームを元に戻し、
新しく入ったっぽいのをリネームする。
/Library/Frameworksのやつ。
 
 
自分は超絶にいいかげんだと言わざるを得ない。
よくわかんないものをいいかげんに使ってる。
なんかもう。O型炸裂。
ちなみに部屋はのだめ。
 
 
どっかでなんか、いろいろとまとめておく必要があると感じた。
ただし、感じるだけで終わるとも感じた。
 
 
続く。
 


Copyright (C) 2010 NEST,
All right Resieved.*Powered by ニンジャブログ *Designed by にこるん  / 忍者ブログ / [PR]