2012-08-30 99 views
1

使NSManagedObject屬性具有唯一性的最佳方法是什麼?唯一NSManagedObject屬性

例如,應該使用willSavevalidateForInsert:validateForUpdate:管理對象方法來檢查在attributeUnique中輸入的值是否爲Unique?而且,究竟如何?

+0

http://stackoverflow.com/questions/2253378/coredata-unique-objects-by-attribute –

回答

0

我最後寫一個NSManagedObject類中的方法,以及使用NSManagedObject的驗證方法:

- (BOOL)isValueUniqueForKey:(NSString *)key { 
    NSEntityDescription *entity = [NSEntityDescription entityForName:[self.entity name] 
               inManagedObjectContext:self.managedObjectContext]; 
    id value = [self valueForKey:key]; 

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    [fetchRequest setEntity:entity]; 

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%@ = %@", key, value]; 
    fetchRequest.predicate = predicate; 

    NSError *error = nil; 
    NSUInteger count = [self.managedObjectContext countForFetchRequest:fetchRequest 
                   error:&error]; 

    if (count > 1) { 
     return NO; 
    } 

    return YES; 
} 
+0

您的處方不完整 - 您只是編寫了一個基本代碼,用於驗證某個屬性值在對象圖中不會出現兩次或多次。 –

+0

您的處方不完整 - isValueUniqueForKey:僅驗證屬性值在對象圖中不會出現兩次或更多次。你沒有告訴你使用了什麼NSMnaagedOBject的驗證方法。它是否validateForInsert:? validatForUpdate:驗證:錯誤:?我已經在驗證:error:方法中嘗試了這一點,但它不起作用,因爲當用戶鍵入值時,計數仍爲1,因爲尚未將該更改設置爲該屬性。此檢查是「驗屍」。它告訴你你的數據庫已經無效了。我想首先防止這種情況發生。 –