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必须是唯一的”错误?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)