2 つの引数を持つ初期化子があります。
-(id) initWithSourceFrame:(CGRect)sourceViewFrame mappedFrame:(CGRect)mappedViewFrame {
CGRect copy = mappedViewFrame;
self = [super init];
if (self) {
// not able to access mappedViewFrame here..
// copy is ok
// doing initialization here...
}
return self;
}
2 番目の引数 (mappedViewFrame) から間違った値を取得しているようです。エラーを探していると、mappedViewFrame が破棄される (メモリ内でオーバーライドされる) ことがわかりました。これは、デバッガーで簡単に確認できます。
flickrのデバッガーのスクリーンショット(まだ画像を投稿できません)
コピーはまだ元の値を保持しているため、この場合はコピーを使用することで回避できました。しかし、もちろん、なぜこれが起こるのかを理解したいと思っています。クラスは NSObject の直接のサブクラスであり、プロジェクト全体が OS X ネイティブ アプリです。最初の引数は破棄されませんでした。問題は、渡された値とは関係ありません。それらを切り替えましたが、常に破損したのは2番目でした。
たとえば、これらの例の引数 (デバッガーのスクリーンショットのものとは異なります) を使用して初期化子を呼び出したところ、同じようにエラーが発生しました。
Mapper *mapper = [[Mapper alloc] initWithSourceFrame:CGRectMake(0, 0, 100, 100) mappedFrame:CGRectMake(0,0, 200,200)];
メソッド宣言:
-(id) initWithSourceFrame:(CGRect) sourceViewFrame mappedFrame:(CGRect) mappedViewFrame;
私はObjective-Cに少し慣れていないので、何か明らかなことを見逃していたら申し訳ありません。ただし、メソッドの呼び出し中に引数が有効にならないのは奇妙に見えます。