NSJSONSerialization
クラスから辞書を作成するメソッドがあります。次に、json を列挙し、各インスタンスの状態を格納するオブジェクトを作成します。
- (void)fetchedData:(NSData *)responseData {
NSError* error;
NSDictionary *json = [NSJSONSerialization
JSONObjectWithData:responseData
options:kNilOptions
error:&error];
NSArray *moviesJson = [json objectForKey:@"movies"];
for(NSDictionary *element in moviesJson)
{
RABMovie *myMovie = [[RABMovie alloc] initWithJson:element];
// RABMovie *myMovie = [RABMovie new];
// myMovie.json = element;
[_myMovieNames addObject: myMovie];
myMovie = nil;
}
[self.movieTableView reloadData];
}
問題:element
アロケータを渡してオブジェクトを作成したいのですが、これを行うと、UITTableView
すべての行に同じ映画データが含まれます。これは常に最後の項目であり、1 つのメモリ アドレスのみを使用して作業していると思われ、最後の更新がコレクション全体に影響します。
alloc パラメータの代わりにプロパティとして使用するコードのコメントを外すjson
と、問題はなくなり、すべて正常に動作します。NSDictionary
また、ディープコピーを使用してまったく新しいものを作成しようとしましたがelement
、役に立ちませんでした。
なぜこれが起こっているのか誰かが知っていますか?ところで、私はARCを使用しています。-時間をありがとう。
編集:さらにコードを追加しました。movieName
ivar の使用方法を説明するためにプロパティを含めました_json
。
@implementation RABMovie
NSDictionary *_json;
- (id) initWithJson: (NSDictionary*) jsonAsDictionary
{
if (self = [super init])
{
_json = jsonAsDictionary;
}
return self;
}
- (NSString*) movieName
{
return [_json objectForKey:@"title"];
}