【发布时间】:2011-12-07 15:15:30
【问题描述】:
我将在这里使用 Google Reader 客户端的示例,因为这就是我实际在做的......
我正在从 Google 阅读器帐户中提取(可能有数千个)项目,我想知道是否有更快的方法来检查我是否已经在数据存储中获得了一个项目 (NSManagedObject)。 Google Reader 为每个项目提供了一个唯一的字符串 ID,我将其存储在我的 NSManagedObjects 中。以下是我在导入时所做的精简基础知识。请注意,我确实使用了后台线程,但为了清楚起见,我在此处删除了它们。
我可以更有效地做到这一点吗?
- (void)importBatchOfItems:(NSArray *)itemsFromGoogleReader isLastBatch:(BOOL)isLastBatch {
for (NSDictionary *item in *itemsFromGoogleReader) {
NSManagedObject *feedItem = [self feedItemWithId:[item valueForKey:@"GoogleReaderItemID"]];
if (feedItem == nil) {
feedItem = [self insertFeedItem];
}
// ... do some stuff with feedItem
}
BOOL saveIntervalElapsed = (([NSDate timeIntervalSinceReferenceDate] - self.lastBatchSave) >= kBatchSaveInterval);
if (saveIntervalElapsed || isLastBatch) {
[self saveContext];
}
}
- (NSManagedObject *)feedItemWithId:(NSString *)itemId {
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"id = %@", itemId];
[self.uniqueItemFetchRequest setPredicate:predicate];
NSArray *items = [self.managedObjectContext executeFetchRequest:self.uniqueItemFetchRequest error:nil];
if ([items count] > 0) {
return [items objectAtIndex:0];
} else {
return nil;
}
}
【问题讨论】:
标签: objective-c core-data nsmanagedobject nsfetchrequest