2013-02-17 3 views
5

My Appはユーザーごとにオブジェクト(PFUSER)を作成し、参加するイベントごとに(PF)オブジェクトを作成します。私はそのイベントに関連する2つのファイルを持っています。私は、最初のファイルをPFFileに保存し、それをイベントpfobjectに関連付けます。ブロックを使用してバックグラウンドでこれを行うと、どのようにして2番目のファイルに対して制御が同じように継続するのかを確認できますか?iOS上でParseを使用する方法、2つのPFFilesをPFObjectにバックグラウンドで保存する方法

私はブロックに新しいので、なぜコールバックで動作しないのかが分かりますが、ブロックが別のスレッドでセーブを実行し、現在のものが次の手順を実行する前に破棄されたように見えます。

もちろん、私はこれらの両方を「最終的に保存」してオフラインで使用できるようにしたいと考えています。

あなたが私に非常に感謝することを指すことができる任意の指針/例。

ありがとうございました!

答えて

11

saveEventuallyはまだPFFilesをサポートしていません。再起動の間にアップロードを再開するためには、もう少しスマートが必要です。しかし、既に利用可能な1つのトリックは、PFObjectがPFFilesを含む子供を救う方法を知っているということです。あなただけ言うことができますよう

PFUser *user = PFUser.currentUser; 
user[@"icon"] = [PFFile fileWithData:iconData]; 
user[@"iconThumb"] = [PFFile fileWithData:iconThumbData]; 
[user saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { 
    // user will automatically save its files & only call this once the 
    // entire operation succeeds. 
}]; 
+0

おかげに関連してsaveEventually PFObjectにできません:

- (void) dr_saveWithCompletionHandler: (void(^)(NSError* error)) completionBlock { __block BOOL canSaveEventually = YES; [[self allKeys] enumerateObjectsUsingBlock:^(NSString* key, NSUInteger idx, BOOL *stop) { id object = self[key]; if ([object isKindOfClass:[PFFile class]]) { PFFile* file = (PFFile*) object; if (!file.url || file.isDirty) { canSaveEventually = NO; } } }]; void (^localCompletionHandler) (BOOL, NSError*) = ^(BOOL succeeded, NSError *error) { if (succeeded) { if (completionBlock) completionBlock(nil); } else { if (completionBlock) completionBlock(error); } }; if (canSaveEventually) { [self saveEventually:localCompletionHandler]; } else { [self saveInBackgroundWithBlock:localCompletionHandler]; } 

}

hangzhouharry

1

私はあなたが任意のコードを投稿していなかったので、あなたが何を意味するか100%ではないんだけど、あなたはこれをPFObjectする複数PFFileを関連付けたい場合は、私が想像するには、あなたがしなければならないすべてである:

PFObject *object = [PFQuery getObjectOfClass:@"MyFile" objectId:id]; 
[object addObject:profilePicture forKey:@"Photo"]; 
[object addObject:coverPicture forKey:@"PhotoCover"]; 
[object saveEventually]; 
それは saveEventuallyように思える Parse's documentationから

は、あなたが欲しいものを行います。

Saves this object to the server at some unspecified time in the future, even if Parse is currently inaccessible. Use this when you may not have a solid network connection, and don’t need to know when the save completes. If there is some problem with the object such that it can’t be saved, it will be silently discarded. If the save completes successfully while the object is still in memory, then callback will be called.

+0

、これは動作しませんが、あなたはこのエラーを取得します。実際には、接続されていなくても私のアプリケーションがこれを呼び出すことができるように見えるので、最終的に保存は素晴らしかったです。現在、私は2つのファイルのそれぞれに対して "saveInBackground"を実行しています。これは、各ファイルを保存した後、現在PFQueryを実行してオブジェクトを取得しています。ファイルを関連付けて更新する必要があります。これを実行すると、はるかに良くなります。正しいオブジェクト!)。ありがとう。 –

1

現在saveEvetuallyもサポートされているローカル・データ・ストアへの保存でもない、以下の私は、少なくとも保存または返却エラーことができるか、オフライン保存に使用していますPFObjectのカテゴリは次のとおりです。

このアイデアのための新しい、未保存PFFile