FlickrAPIの写真の応答を解析するクラスFlickrImageのインスタンスを作成しています。このクラスには、ジオロケーションを取得するために別のAPI呼び出しを行うgetLocationメソッドがあります。
NSLog(@"getting location for %i",self.ID);
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
OFFlickrAPIRequest *flickrAPIRequest = [[OFFlickrAPIRequest alloc] initWithAPIContext[appDelegate sharedDelegate].flickrAPIContext];
[flickrAPIRequest setDelegate:self];
NSString *flickrAPIMethodToCall = @"flickr.photos.geo.getLocation";
NSDictionary *requestArguments = [[NSDictionary alloc] initWithObjectsAndKeys:FLICKR_API_KEY,@"api_key",self.ID,@"photo_id",nil];
[flickrAPIRequest callAPIMethodWithGET:flickrAPIMethodToCall arguments:requestArguments];
[pool release];
APIからの応答をキャッチし、ジオロケーションデータでFlickrImageインスタンスを更新するコールバックメソッドを実装しましたが、呼び出されることはありません。インスタンスが作成される場所は次のとおりです。
NSDictionary *photosDictionary = [inResponseDictionary valueForKeyPath:@"photos.photo"];
NSDictionary *photoDictionary;
FlickrImage *flickrImage;
for (photoDictionary in photosDictionary) {
flickrImage = [[FlickrImage alloc] init];
flickrImage.thumbnailURL = [[appDelegate sharedDelegate].flickrAPIContext photoSourceURLFromDictionary:photoDictionary size:OFFlickrThumbnailSize];
flickrImage.hasLocation = TRUE; // TODO this is actually to be determined...
flickrImage.ID = [NSString stringWithFormat:@"%@",[photoDictionary valueForKeyPath:@"id"]];
flickrImage.owner = [photoDictionary valueForKeyPath:@"owner"];
flickrImage.title = [photoDictionary valueForKeyPath:@"title"];
[self.flickrImages addObject:[flickrImage retain]];
[flickrImage release];
[photoDictionary release];
}
これを解決するのに役立つかもしれないと思ったのretain
ですが、そうではありません-そして、NSMutableArray(flickrImagesはNSMutableArray)はとにかくそのメンバーを保持しませんか?
編集メソッド(最初のコードスニペット)がスレッドで起動されることを追加する必要がgetLocation
あります:[NSThread detachNewThreadSelector:@selector(getLocation)toTarget:self withObject:nil];