我正在使用RestKit將數據導入到Core Data存儲中,並且需要檢查重複項。如果商品已在商店中,我想用最新的屬性進行更新。如果它是一個新項目,我想創建它。導入到CoreData時檢查重複
進口很慢,所以我用儀器,發現進口的最長的部分是檢查,看看該項目的已存在的(與讀取請求)
所以我想知道,如果檢查,看看如果該項目已經在店裏,是它能更快:
- 使用countForFetchRequest看,如果該項目已存在,則executeFetchRequest返回更新的項目或
- 只是executeFetchRequest拿到項目更新
- 還是有更好的方法來做到這一點?
我認爲countForFetchRequest會更快,因爲整個NSManagedObject不會返回並且只有在我知道會有NSManagedObject時才執行獲取請求。
感謝
- (Product *)productWithId:(int)productID {
NSManagedObjectContext *context = [Model sharedInstance].managedObjectContext;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"product_id == %d", productID];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
request.entity = [NSEntityDescription entityForName:@"Product" inManagedObjectContext:context];
request.predicate = predicate;
request.fetchLimit = 1;
NSError *error = nil;
NSUInteger count = [context countForFetchRequest:request error:&error];
if (!error && count == 1) {
NSArray *results = [context executeFetchRequest:request error:&error];
if (!error && [results count]) {
return [results objectAtIndex:0];
}
return nil;
}
return nil;
}
我沒有做過多的性能檢查,但我使用'[fetchRequest setFetchLimit:1];''和'countForFetchRequest',我沒有真正注意到任何性能問題。有多少個對象正在更新?你只發送需要更新的對象嗎? (來自Web服務) – mkral
還要確保您沒有在主線程上進行同步 – mkral
多個項目一次從API進來,並且都需要檢查重複項目。它不是一次一個。 –