[英]Coredata entity with exactly one row
我的coredata表之一(呃,實體)應該只存儲一行數據。 如果該行不存在,則應創建該行,如果該行已經存在,則應使用新數據覆蓋(或編輯)同一行。
當前,在我的實現中,總是將新行添加到實體(名為“ TempNames”):
/* Store names data in temporary name table. */
TempNames *tempNames = [NSEntityDescription insertNewObjectForEntityForName:@"TempNames" inManagedObjectContext:context];
tempNames.namesData = tempNamesData;
誰能給我一些提示,將其更改為所需的功能需要什么? 我想需要NSPredicate才能實現我想要的?
更新的工作實現:
/* Convert names array into serializable data. */
NSData *tempNamesData = [NSKeyedArchiver archivedDataWithRootObject:names];
/* Store names data in temporary name table. */
TempNames *tempNames = nil;
NSError *error;
NSFetchRequest *req = [NSFetchRequest fetchRequestWithEntityName:@"TempNames"];
NSArray *records = [context executeFetchRequest:req error:&error];
/* Record already exists. */
if (records.count > 0)
{
tempNames = records.firstObject;
}
else
{
tempNames = [NSEntityDescription insertNewObjectForEntityForName:@"TempNames" inManagedObjectContext:context];
}
tempNames.namesData = tempNamesData;
[context save:&error];
像這樣嘗試:
TempNames *tempNames = nil;
NSFetchRequest *appRequest = [NSFetchRequest fetchRequestWithEntityName:@"TempNames"];
NSArray *allNames = [context executeFetchRequest:appRequest error:nil];
if (allNames.count > 0) {
// your record exists
tempNames = allNames.firstObject;
} else {
tempNames = [NSEntityDescription insertNewObjectForEntityForName:@"TempNames" inManagedObjectContext:context];
}
tempNames.namesData = tempNamesData;
如果每次都插入一個新實體,則不會執行插入/更新操作,即使該實體的數據相同,它也始終是插入操作。 您應該做的是首先獲取是否有存儲中的數據,然后確定是否需要插入或更新數據。
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"TempNames"];
NSError *error;
NSArray *entities = [context executeFetchRequest:request error:&error];
if (entities.count > 0) {
// You have already inserted the entity
}
else {
// Insert your new entity
...
// Save changes to the store
NSError *error;
[context save:&error];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.