使用 JSON 键值 ( id ) 更新核心数据
Posted
技术标签:
【中文标题】使用 JSON 键值 ( id ) 更新核心数据【英文标题】:Update Core Data with JSON Key Value ( id ) 【发布时间】:2015-05-08 10:42:17 【问题描述】:我在更新核心数据时遇到问题。 我正在后台线程中下载数据,与核心数据和计数中的标识符进行比较,但现在无法更新我想使用 JSON 响应检查核心数据中存在的标识符,如果 JSON 响应中存在 id,请留下它并如果 JSON 响应中不存在(这意味着该记录已在服务器端删除)
在此代码中,我正在检查 id 是否存在于核心数据中,现在我想检查 id 是否存在于 json 中以更新记录
任何帮助将不胜感激提前感谢 请检查代码如何将数据存储到核心数据中
for (int i = 0; i < [arrayData count]; i++)
NSNumber * idNum = [arrayData objectAtIndex:i][@"id"];
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Deal"];
[request setPredicate:[NSPredicate predicateWithFormat:@"identifier == %@",idNum]];
[request setFetchLimit:1];
NSUInteger count = [_managedObjectContext countForFetchRequest:request error:&error];
if (count == NSNotFound)
NSLog(@"ERROR");
else if (count == 0)
Deal * dealsEntity = [NSEntityDescription insertNewObjectForEntityForName:@"Deal" inManagedObjectContext:_managedObjectContext];
NSString * name = [arrayData objectAtIndex:i][@"name"];
dealsEntity.nameAttribute = name;
dealsEntity.identifier = idNum;
[appDelegate saveContext];
[self performSelectorOnMainThread:@selector(updateData:) withObject:_myArray waitUntilDone:YES];
- (void) updateData:(NSArray *)yourData
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Deal" inManagedObjectContext:_managedObjectContext];
[fetchRequest setReturnsObjectsAsFaults:NO];
[fetchRequest setEntity:entity];
NSError *error;
yourData = [_managedObjectContext executeFetchRequest:fetchRequest error:&error];
self.myArray = yourData;
[listTableView reloadData];
我已经尝试过更新或删除 coredata 中的记录
for (int d = 0; d < [_myArray count]; d++)
Deal * deal = (Deal*)_myArray[d];
NSNumber * identifier = [deal identifier];
if ([identifier isEqualToNumber:[[arrayData objectAtIndex:d] valueForKey:@"id"]] )
NSLog(@"equal %d",d);
else
NSLog(@"Kill it ");
但这里的问题是Coredata在使用json检查时有115条记录但json只有114条记录并且它返回崩溃
【问题讨论】:
您遇到了什么问题? 现在正在检查来自 JSON 的 iD,如果它不存在于核心数据中,则必须存储上述代码工作正常 但是现在我想通过检查 json 中是否存在 Coredata 标识符来更新数据库并更新数据库 例如,将来会从 json 响应中删除一条记录,因此核心数据也必须检查 json 响应 我想要一些代码来更新核心数据中的数据 【参考方案1】:由于您的数据库中有标识符,因此您只需稍微更改代码
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Deal" inManagedObjectContext:moc]];
[request setPredicate:[NSPredicate predicateWithFormat:@"identifier == %@",idNum]];
[request setFetchLimit:1];
NSError *error = nil;
NSArray *results = [moc executeFetchRequest:request error:&error];
// check the count
if([results count] == 1)
// Update your coredata object
else
// Create new object
【讨论】:
例如,现在核心数据有 100 条记录,对于 json 端,一条记录被删除,这意味着我必须删除核心数据中的一条记录 您如何决定是要创建新数据行还是要删除它? if([results count] == 1) 在这个地方你告诉我通过使用 JSON 检查 CoreData 来更新数据 是的,这意味着具有该 id 的数据可用于 coredata,您不能使用相同的 JSON 来添加和更新数据库以及删除。 所以为此我必须创建一个获取请求并获取 coredata 中存在的 id 并检查 Json 权限以上是关于使用 JSON 键值 ( id ) 更新核心数据的主要内容,如果未能解决你的问题,请参考以下文章
Postgresql 更新 JSON 列保留一些键值并将附加键值添加为空