2013-07-15 17 views
0

我正在嘗試將unique values添加到我的sqlite數據庫中。如何在數據庫中只添加單個值與核心數據?

我試圖創建到.xcdatamodeld獨特的屬性,但我沒有成功。

這部分代碼將表F016Terminaison中的所有terminaison相加。我怎樣才能只添加unique terminaison values

for (NSString *terminaison in [[verbe objectForKey:temps] objectForKey:@"terminaison"]) 
{ 
    F016Terminaison *newTerminaison = [NSEntityDescription insertNewObjectForEntityForName:@"F016Terminaison" inManagedObjectContext:self.managedObjectContext]; 
    newTerminaison.name = terminaison;    
} 

回答

1

insertNewObjectForEntityForName每次調用創建一個新對象並將其插入到 被管理對象上下文。

如果您只想要唯一值,則必須先檢查具有該值 的對象是否已存在。這與一個NSFetchRequest完成了一個謂語像

[NSPredicate predicateWithFormat:@"name == %@", terminaison]; 

如果你需要插入多個值,那麼它是更有效的獲取從新名單有 值的所有對象第一,而不是許多提取請求。

將「核心數據編程指南」中的"Implementing Find-or-Create Efficiently"進行比較。

+0

謝謝你的答案。 –

+0

@ Tom-pouce:不客氣! –

1

您需要執行一次提取以查找對象的現有實例,然後在不存在的情況下添加它。

如:

// assumes your object has a "uniqueAttribute" and you supply a uniqueValue to test 
NSPredicate * predicate = [NSPredicate predicateWithFormat:@"uniqueAttribute == %@", uniqueValue]; 
NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init]; 
[fetchRequest setPredicate:predicate]; 
[fetchRequest setFetchLimit:1]; 
NSError * error = nil; 
NSArray * results = [managedObjectContext executeFetchRequest:fetchRequest error:&error]; 
if ([results count] == 1) { 
    id existingObject = [results objectAtIndex:0]; 
    // do something with existing object 
} 
else if (results) { 
    // create a new object 
} 
else { 
    NSLog(@"executeFetchRequest returned error: %@ (userInfo: %@)", [error localizedDescription], [error userInfo]); 
}