2012-03-05 196 views
1

假設我從遠程Web服務下載數據。更準確地說,我從Web服務下載新聞列表,每個新聞都有一個newsID,我們可以將其視爲服務的主鍵,因此我們不會找到兩個相同的newsID。核心數據屬性唯一性

我怎樣才能確定我只插入了一個尚不存在的newsID的數據?

我已經草擬我用這種方法解決:

- (BOOL)validateNewsID:(NSNumber **)newsID error:(NSError **)error 
{ 
    NSError *countError = nil; 
    NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease]; 
    [fetchRequest setEntity:[self entity]]; 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"newsID == %@", *newsID]; 
    [fetchRequest setPredicate:predicate]; 


    NSUInteger resultCount = [SharedManagedObjectContext countForFetchRequest:fetchRequest error:&countError]; 
    if (countError) { 
     OLog(countError); 
     *error = countError; 
     return NO; 
    } 

    if (resultCount > 0) { 
     NSString *errorString  = @"NewsID should be unique"; 
     NSDictionary *userInfoDict = [NSDictionary dictionaryWithObject:errorString 
                    forKey:NSLocalizedDescriptionKey]; 
     NSError *uniquenessError = [[[NSError alloc] initWithDomain:kNewsValidationDomain 
                    code:kNewsValidationUniquenessCode 
                   userInfo:userInfoDict] autorelease]; 
     *error = uniquenessError; 
     return NO; 
    } 

    return YES; 
} 

,但確實如預期,因爲,我想,當我執行讀取請求,我發現我的同一個對象之前在上下文中插入不工作。我錯了嗎?

我該如何解決?

+0

你爲什麼要發送一個指針作爲newsID的指針? – 2012-03-05 19:39:05

+0

因爲聲明瞭參數(NSNumber **)newsID – 2012-03-06 08:27:52

回答

0

好像你會發現你想要驗證的對象。嘗試其中一種方法:

  1. 在檢查其他條目之前,執行提取請求並從結果數組中刪除當前對象。
  2. 調整謂詞,使其排除當前對象(如果可能)。
  3. 更改resultCount > 0resultCount > 1