私は、iOSデバイスからWebサーバーに写真を非同期でアップロードするユーティリティを書いています。各写真はPhoto
Core Dataエンティティで表され、ファイルシステム内の写真のファイル名のプロパティとブールhas_been_uploaded
のプロパティを持ちます。userInfo経由でNSManagedObjectsを更新する
アップロードする画像のキューを作成し、アップロードが完了したらhas_been_uploaded
プロパティをYESに設定したいとします。 ASIHTTPRequestとASINetworkQueueをネットワーク側に使用しています。
Core Dataから必要なイメージを取得してアップロードすることは問題ありません。私の問題は正しいエンティティのhas_been_uploaded
プロパティを更新することです。
現時点では私のコードはこれです:
for (Photo *myPhoto in [fetchedResultsController fetchedObjects]) {
if(myPhoto.path != nil) {
__block ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"http://example.com/postimage"]];
NSString *imagePath = [NSString stringWithFormat:@"%@.png",[documentsDirectory stringByAppendingPathComponent:[myPhoto valueForKey:@"path"]]];
[request addFile:imagePath withFileName:[NSString stringWithFormat:@"%@.png",myPhoto.path] andContentType:@"image/png" forKey:@"image"];
[request.userInfo setValue:myPhoto forKey:@"photo"];
[[self imageUploadQueue] addOperation:request];
}
}
[[self imageUploadQueue] go];
しかし、私は、要求のユーザ情報辞書からそれを取得しようとすると、その後ASIHTTPRequestのdidCompleteのデリゲートメソッドでは、写真のオブジェクトは常にnullです:
- (void)queueRequestFinished:(ASIHTTPRequest *)request
{
Photo *photo = (Photo *)[request.userInfo valueForKey:@"photo"];
NSLog(@"uploaded image for photo: %@",photo);
}
正しいCore Dataオブジェクトを確実に取得して、各要求が完了した後にステータスを更新するにはどうすればよいですか?
ありがとうございます!