2012-03-23 17 views
0

私は、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オブジェクトを確実に取得して、各要求が完了した後にステータスを更新するにはどうすればよいですか?

ありがとうございます!

答えて

0

すべてのmanagedobjectはmanagedobjectcontextとバインドされているので、インターネットを介してオブジェクトを送信してから戻すことはできません。コンテキストへのリンクが失われるため、戻ってくることはできません。 NSmanagedObjectIDを取得し、このIDを使用してコンテキストからオブジェクトを取得します。

関連する問題