簡體   English   中英

僅有一行的Coredata實體

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM