2011-08-16 13 views
1

私はcoreDataで始まりますが、疑問があります。CoreData - 保存時に疑問がある

私はサーバーからデータを読み込み、データを解析し、オブジェクトのNSDictionaryとして取得するアプリケーションを持っています。 coreDataにデータを保存するには

、私は次のようにします。

for (NSDictionary *activityData in arrayWithResult){ 
     [CompanyActivity createActivityWithInfoFromServer:activityData inManagedObjectContext:self.managedObjectContext]; 
    } 

    if (![self.managedObjectContext save:&error]) 
     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 

これは、約300レコードを読み込みます。 'createActivityWithInfoFromServer:'メソッドは、その名前のレコードがあるかどうかをチェックします。そうであれば、データを更新し、そうでなければデータを更新する。

"for"サイクルが実行されている間に、私がユーザーインターフェイスとやりとりすると、コアデータの保存が停止することがあります。どうして?

サイクル内でSAVEを実行すると、問題は解決します。

どうすればよいですか?

おかげで、すべて、

RL

+0

「保存が中止されました」とはどういう意味ですか?間違いはありますか?オブジェクトは作成されますが保存されませんか? – TechZen

+0

エラーはありません。私はNSLogを持っており、ロギングを停止し、オブジェクトは作成されません。時々、それは168、他の時間、230、他の時、それらのすべてを作成します... –

+0

'arrayWithResult'はx個のエントリを持ちますが、y個の管理対象オブジェクトだけが保存されるということですか?いくつかの辞書がすでにCore Dataに重複している場合、いくつのオブジェクトを作成して保存すべきかをどのように知っていますか? – TechZen

答えて

0

あなたの推理はまだユーザーがUIと対話できるようにすることであるかに応じて、その時のためにUIを無効にする可能性がいずれか、または処理する新しいスレッドを作成しますあなたが投稿したコード部分。

時には保存に失敗する理由は、新しいオブジェクトをたくさん作成する必要はなく、より早く終了することがあり、UIと対話する前に保存できると仮定します。 forループの中に保存する場合は、各項目を見てからすべてを保存するよりもかなり効率が悪いです。

+0

このジョブのスレッドを作成するには、次のようにします。 dispatch_queue_t registerDeviceQueue = dispatch_queue_create( "RegisterDevice"、NULL); dispatch_async(registerDeviceQueue、^ {arrayWithResultにおける(NSDictionaryの* activityData){ため \t \t [CompanyActivity createActivityWithInfoFromServer:activityData inManagedObjectContext:self.managedObjectContext]; }})。 dispatch_release(registerDeviceQueue); –

+0

あなたは正しいアイデアを持っているようですね、より多くの資料が必要な場合は、この質問をかなりうまくカバーするようです:http://stackoverflow.com/questions/3869217/iphone-ios-running-in-separate-糸 –

関連する問題