【问题标题】:Update Core Data with JSON Key Value ( id )使用 JSON 键值 ( 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 响应
  • 我想要一些代码来更新核心数据中的数据

标签: ios iphone json core-data


【解决方案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 权限
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多