ios – 执行对CoreData的添加更新的问题

ios – 执行对CoreData的添加更新的问题,第1张

概述我有一个NSArray持有一些NSDictionary,每次我保存一个NSDictionary对象并将其添加到NSArray,我发送它到添加/更新功能. 我知道我读的数据是正确的,当我以前添加没有更新功能的数据时,所有数据都插入到CoreData中,但是我想添加更新函数来验证我放的数据. 现在,该函数添加第一个对象,然后一遍又一遍地进入’更新’. 怎么了? 我的代码: -(void)updateO 我有一个NSArray持有一些NSDictionary,每次我保存一个NSDictionary对象并将其添加到NSArray,我发送它到添加/更新功能.
我知道我读的数据是正确的,当我以前添加没有更新功能的数据时,所有数据都插入到CoreData中,但是我想添加更新函数来验证我放的数据.
现在,该函数添加第一个对象,然后一遍又一遍地进入’更新’.
怎么了?

我的代码:

-(voID)updateOrAddTrap:(NSMutableDictionary*)trapObject{    NSInteger trAPID = [trapObject[@"ID"] integerValue];    Trap *trapEntity = nil;    NSError *error = nil;    Boolean success = true;    self.fetchRequest = [[NSFetchRequest alloc] initWithEntityname:@"Trap"];    self.predicate = [nspredicate predicateWithFormat:@"trAPID == %d",trAPID];    [self.fetchRequest setPredicate:self.predicate];    NSArray *results = [self.managedobjectContext executeFetchRequest:self.fetchRequest error:&error];    if (results == nil)    {        // Handle error        NSLog(@"HANDLE ERROR");        success = false;    }    else if ([results count] == 0)    {        // nothing to update,add new trap        NSLog(@"nothing TO UPDATE | ADD NEW");        // Create a new record (row)        trapEntity = [NSEntityDescription insertNewObjectForEntityForname:@"Trap" inManagedobjectContext:self.managedobjectContext];    }    else    {        NSLog(@"UPDATE EXISTING OBJECT");        trapEntity = results[0]; // There should be only one object for the ID.    }    if (trapEntity != nil)    {        // Set propertIEs for new or existing object ...        // Int        int alarmdistance = [[trapObject objectForKey:ALARMdisTANCE] intValue];        int type = [[trapObject objectForKey:TYPE] intValue];        int roadNumber = [[trapObject objectForKey:ROADNUMBER] intValue];        int trap_ID = [[trapObject objectForKey:ID] intValue];        int polys = [[trapObject objectForKey:polyGONS] intValue];        int degrees = [[trapObject objectForKey:degrees] intValue];        [trapEntity setAlarmdistance:[NSNumber numberWithInt:alarmdistance]];        [trapEntity setType:[NSNumber numberWithInt:type]];        [trapEntity setRoadNumber:[NSNumber numberWithInt:roadNumber]];        [trapEntity setTrAPID:[NSNumber numberWithInt:trap_ID]];        [trapEntity setpolys:[NSNumber numberWithInt:polys]];        [trapEntity setdegrees:[NSNumber numberWithInt:degrees]];        // Boolean        BOol isActive = [[trapObject objectForKey:ISACTIVE] integerValue] == 1 ? YES : NO;        [trapEntity setIsActive:[NSNumber numberWithBool:isActive]];        // float        float lat = [[trapObject objectForKey:LAT] floatValue];        float lon = [[trapObject objectForKey:LON] floatValue];        [trapEntity setLat:[NSNumber numberWithfloat:lat]];        [trapEntity setLon:[NSNumber numberWithfloat:lon]];        // Nsstring        [trapEntity setDirection:[trapObject objectForKey:DIRECTION]];        [trapEntity setTrapDescription:[trapObject objectForKey:DESCRIPTION]];        [trapEntity setpoly0:[trapObject objectForKey:polyGON_A]];        [trapEntity setpoly1:[trapObject objectForKey:polyGON_B]];        [trapEntity setpoly2:[trapObject objectForKey:polyGON_C]];        [trapEntity setpolygonAzimut1:[trapObject objectForKey:polyGON_A_AZIMUTH]];        [trapEntity setpolygonAzimut2:[trapObject objectForKey:polyGON_B_AZIMUTH]];        [trapEntity setpolygonAzimut3:[trapObject objectForKey:polyGON_C_AZIMUTH]];        // etc. for all propertIEs ...        if (![self.managedobjectContext save:&error])        {            NSLog(@"HANDLE ERROR WHEN SAVING THE OBJECT");            success = false;        }    }}

我很高兴知道如何正确更新,因为我现在也错过了这个功能.

编辑:
感谢马丁,代码就像一个魅力.

解决方法 我不确定这是否是您的问题的原因,但是您检查错误
条件或空结果是错误的.它应该是

BOol success = true;Trap *trap = nil;NSArray *results = [self.managedobjectContext executeFetchRequest:self.fetchRequest error:&error];if (results == nil) {    NSLog(@"HANDLE ERROR");    success = false;} else if ([results count] == 0) {    NSLog(@"nothing TO UPDATE | ADD NEW");    trap = [NSEntityDescription insertNewObjectForEntityForname:@"Trap" inManagedobjectContext:self.managedobjectContext];} else {    NSLog(@"UPDATE EXISTING OBJECT");    trap = result[0]; // There should be only one object for the ID.}if (trap != nil) {    // Set propertIEs for new or existing object ...    [trap setTrAPID:[NSNumber numberWithInt:trap_ID]];    // etc. for all propertIEs ...    if (![self.managedobjectContext save:&error]) {        NSLog(@"HANDLE ERROR WHEN SAVING THE OBJECT");        success = false;    }}

executeFetchRequest返回

>如果发生错误,则为零,并且>如果找不到匹配的对象,则为空数组.

总结

以上是内存溢出为你收集整理的ios – 执行对CoreData的添加/更新的问题全部内容,希望文章能够帮你解决ios – 执行对CoreData的添加/更新的问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/1052733.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存