2016-04-08 24 views
1

私のアプリでは、ユーザーが「今週のお気に入りのレストラン」オブジェクトを保存すると、まず保存したすべてのレストランをCore Dataにフェッチしてチェックしますどちらが1週間よりも古い。私はすでにオブジェクトが保存されるときに設定されるdateSaved属性を持つ私のRestaurantオブジェクトをそれぞれ持っています。iOS Core Data - 1週間以上経過しているオブジェクトを削除する

1週間以上経過したRestaurantオブジェクトをすべて削除したら、その後、ユーザーが選択したレストランをCore Dataに保存します。

どうすればよいですか?

答えて

2

そして、結果の配列を取得し、そのように列挙するので

NSManagedObjectContext *moc = …; 
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Restaurant"]; 

NSError *error = nil; 
NSArray *results = [moc executeFetchRequest:request error:&error]; 
if (!results) { 
    DLog(@"Error fetching Restaurant objects: %@\n%@", [error localizedDescription], [error userInfo]); 
    abort(); 
} 

のようなレコードをフェッチ:

NSMutableArray *newerRestaurantsArray = [NSMutableArray alloc] init]; 
for (id object in results){ 
//or use a block if you want 
NSManagedObject *restaurant = (NSManagedObject *)object; 

if (object.dateSaved > date a week ago){ 

[newRestaurantsArray addObject: object]; 
} 

} 

newRestaurantsArrayは、あなたが欲しいものを持っています。あなたがしたくないものを削除するか、それらのすべてを削除して、必要なものだけを元に戻す必要があります。保存する方法と実装方法を示すこのtutorialを見てください。

NSPredicateを使用して、必要な結果のみを取得することもできます。あなたはthisの答えをチェックしてください。あなたの特定のケースのためにどのように見てください。

+0

ありがとうございます!私は、それらを1つずつ削除してコンテキストを保存するか、それらのバッチを削除する必要があるかどうか、さらに心配していました。バックグラウンドスレッドでこれを行う必要がありますか?私はCore Dataの初心者ですので、複数のオブジェクトを削除するのにどれくらい時間がかかります。 – Rafi

+1

もちろんバックグラウンドスレッドで実行できます。それはそれを逐次的に行うよりもはるかに複雑です。あなたが信頼できる良いコードを見つけることができたら、私は先に進んでasychをやるが、そうすることには大きな注意点がある。 – noobsmcgoobs

+1

これについて考えると、おそらく 'NSPredicate'答えを見てみるべきです。それはそれを行う最も効率的な方法です。あなたの援助が早く必要なように見えたので、頭の上から答えを出すだけでした。私はコアデータを頻繁に使用しないので、完全な答えを返さなかったのはなぜですか?「NSPredicate」とスレッディングは、あまり上手くいきません。 – noobsmcgoobs

関連する問題