1

の配列を初期化しようとしていますが、Photo次のようにしています。

NSMutableArray *photoList = [[NSMutableArray alloc] init];
self.photos = photoList;

しかし、このコード行を実行すると、次のエラーが発生します。

'NSInvalidArgumentException', reason: '-[Project setPhotos:]: unrecognized selector sent to instance 0xee8e310'

修正を見つけるのに約 3 時間費やしましたが、解決できませんでした。

4

5 に答える 5

4

プロパティの写真を作成していないようです。作成している場合は、このプロパティが@synthesize実装に含まれていないように見えます。おそらく、を使用して@dynamicいます。この場合、- (void)setPhotos:(NSMutableArray*)photos;メソッドを作成するのはあなた次第です。

于 2012-08-03T14:16:31.890 に答える
2

selfと呼ばれるプロパティがありませんphotos

@property (nonatomic, strong) NSArray *photos;の前に、.hファイルを追加する必要があります@end

そして.mファイルでは、@synthesize photo;

于 2012-08-03T14:15:24.820 に答える
2

このコード行:

self.photos = photoList;

この行に変わります

[self setPhotos:photoList];

コンパイラによる - ドット表記は「シンタティック シュガー」と呼ばれるものであり、そのままでは入力が簡単になるだけであり、コードを実際に短縮するわけではありません。

独自のゲッターとセッターを作成した場合 (つまり)

- (NSMutableArray *)photos;
- (void)setPhotos:(NSMutableArray *)myPhotos

次に、「写真」と呼ばれるプロパティがなくても、その砂糖を使用できます。ただし、これは機能の誤用と見なされます (比較のために示します)。

photos という名前のプロパティを作成する場合:

@property (nonatomic, strong) NSMutableArray *photos;

コンパイラは同じ名前を使用して ivar を生成しますが、ゲッターとセッターは作成しません。この線:

@synthesize photos;

getter (すべての場合) と setter (プロパティが読み書き可能な場合) を実行するようにコンパイラに要求します。@synthesize ステートメントを提供しない場合、コンパイラは通常文句を言うので、人々はこれらの警告を観察する必要があります。

setPhotos がないことをエラーで確認できるため、問題は非常に簡単に修正できます。

于 2012-08-03T14:23:18.983 に答える
1

おっと、私は@dynamic photos代わりに使用しました@synthesize photos

于 2012-08-03T14:15:47.650 に答える