iphone – 为什么这段代码会引发“CoreData:error:(19)PRIMARY KEY必须是唯一的”错误?

iphone – 为什么这段代码会引发“CoreData:error:(19)PRIMARY KEY必须是唯一的”错误?,第1张

概述此代码引发“CoreData:error:(19)PRIMARY KEY必须是唯一的”错误. Day实体只有一个属性,它是一个NSDate,以及一个称为任务的多对多关系.为什么这个错误?如果已经存储了具有特定日期的日期,我会获取它,否则我会插入它.因此,对于每一天的对象,应该有一个不同的属性.我不确定这是否是主键.怎么解决这个?先谢谢你. NSMutableSet *occurrences = n 此代码引发“CoreData:error:(19)PRIMARY KEY必须是唯一的”错误.
Day实体只有一个属性,它是一个NSDate,以及一个称为任务的多对多关系.为什么这个错误?如果已经存储了具有特定日期的日期,我会获取它,否则我会插入它.因此,对于每一天的对象,应该有一个不同的属性.我不确定这是否是主键.怎么解决这个?先谢谢你.

NSMutableSet *occurrences = nil;   occurrences = ...    NSMutableOrderedSet *newSet = [NSMutableOrderedSet orderedSetWithCapacity:[occurrences count]];   for(NSDate *current in occurrences) {        NSautoreleasePool *pool = [[NSautoreleasePool alloc] init];        // try to find a corresponding Day entity whose when attribute is equal to the current occurrence        // if none is available,create it        Day * day = [[self getDayForDate:current inManagedobjectContext:moc] retain];        if(!day){            day = (Day *) [NSEntityDescription insertNewObjectForEntityForname:@"Day" inManagedobjectContext:moc];        }        day.when = current;        [day addTasksObject:aTask];        [newSet addobject:day];        [moc insertObject:day];        [moc processpendingChanges];        [day release];        [pool release];                } - (Day *)getDayForDate:(NSDate *)aDate inManagedobjectContext:(NSManagedobjectContext *)moc{            NSFetchRequest *request = [[NSFetchRequest alloc] init];    NSEntityDescription *entity = [NSEntityDescription entityForname:@"Day" inManagedobjectContext:moc];    [request setEntity:entity];    nspredicate *predicate = [nspredicate predicateWithFormat:@"(when == %@)",aDate];    [request setPredicate:predicate];    NSError *error = nil;    NSArray *array = [moc executeFetchRequest:request error:&error];    [request release];    Day *theDay = nil;    if(array && [array count] == 1){        theDay = [array objectAtIndex:0];    }    return theDay;}
解决方法 如果您已经拥有它,我想您不需要插入新的一天(当天不是零时就是这种情况).特别是我指的是[moc insertObject:day].

如果使用insertNewObjectForEntityForname,则在保存moc时该方法会为您插入对象.如果你需要修改它(你已经检索了一个非零日)修改它并保存.另外,我将在循环结束时执行processpendingChanges(仅出于性能原因).

希望有所帮助.

总结

以上是内存溢出为你收集整理的iphone – 为什么这段代码会引发“CoreData:error:(19)PRIMARY KEY必须是唯一的”错误?全部内容,希望文章能够帮你解决iphone – 为什么这段代码会引发“CoreData:error:(19)PRIMARY KEY必须是唯一的”错误?所遇到的程序开发问题。

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

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

原文地址: http://outofmemory.cn/web/1086198.html

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

发表评论

登录后才能评论

评论列表(0条)

保存