大佬教程收集整理的这篇文章主要介绍了ios – 将新属性添加到现有的核心数据实体关系,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我创建了一个2个实体来管理应用上的聊天和用户和消息之间的一对多关系.所以用户可以有很多消息,但消息只是你的用户(创建者).
当添加新消息时,我尝试更新ChatUser实体关系,从而建立了ChatUser ID和Chatmessage之间的连接.我可以做到这一点,但是当我去添加一个新的消息到一个现有的userId时出现问题.目前正在实现的一切都是在ChatUser中添加一个额外的userId,而不是仅添加与现有UserId的关系.
NsmanagedObjectContext *context = [self managedObjectContext]; NSError *error = nil; // 4 . Get timestamp for Rippll float timestamp = @([[NSDate date] timeIntervalSince1970]).floatValue; NSString * jayID = @"eu-West-1:be6457ce-BAC1-412d-9307-e375e52e22ff"; NSString *message = @"Science String!"; // Create a new managed object ChatUser *chatUseRMANagedObject = [NSEntityDescription insertNewObjectForEntityForName:@"ChatUser" inManagedObjectContext:context]; Chat *chatManagedObject = [NSEntityDescription insertNewObjectForEntityForName:@"Chatmessage" inManagedObjectContext:context]; Timeline *timelineManagedObject = [NSEntityDescription insertNewObjectForEntityForName:@"Timeline" inManagedObjectContext:context]; // 3 . Save Timeline [timelineManagedObject setEvent:chatEvent]; [timelineManagedObject settimestamp:[NSnumber numberWithFloat:timestamp]]; [timelineManagedObject setMeta:@""]; [timelineManagedObject setViewed:@NO]; [timelineManagedObject setEventID:jayID]; //Save Usermessage [chatManagedObject setChatId:jayID]; [chatManagedObject settimestamp:[NSnumber numberWithFloat:timestamp]]; [chatManagedObject setmessage:message]; [chatManagedObject setMedia:@""]; //check if value exists NSFetchrequest *request = [NSFetchrequest fetchrequestWithEntityName:@"ChatUser"]; [request setPreDicate:[NSPreDicate preDicateWithFormat:@"userId = %@",jayID]]; [request setFetchLimit:1]; NSArray *entities = [[context executeFetchrequest:request error:&error] mutableCopy]; if (entities.count == 0) { NSLog(@"GOOD TO ADD"); // no matching object [chatUseRMANagedObject setUserId:jayID]; //Create Relationship [chatUseRMANagedObject addChatObject:chatManagedObject]; } else { NSLog(@"IT EXISTS!"); [chatManagedObject setChat:chatUseRMANagedObject]; } // Save the object to persistent store if (![context save:&error]) { NSLog(@"Can't Save! %@ %@",error,[error localizedDescription]); }
首先重命名关系.可能在Chatmessage中应该有一个名为user(或chatUser)的to-1关系,而在ChatUser中应该有一个to-N关系消息(或chatmessages).他们应该是反向关系.
接下来,您应该在创建用户之前询问用户的存在. (否则你创建幻像用户.)你得到它的代码:
// Create message as you did Chatmessage *message = …; … // The user will go here ChatUser *user; // Do not use types in names unless conversion is subject of your code // Look for an exisTing one NSFetchrequest *request = [NSFetchrequest fetchrequestWithEntityName:@"ChatUser"]; [request setPreDicate:[NSPreDicate preDicateWithFormat:@"userId = %@",jayID]]; [request setFetchLimit:1]; NSArray *entities = [[context executeFetchrequest:request error:&error] mutableCopy]; if (entities.count == 0) { // Only if there is none,create one user = [NSEntityDescription insertNewObjectForEntityForName:@"ChatUser" inManagedObjectContext:context]; // Set-up user's properties … } else { // Use the exisTing one user = entities[0]; } [message SETVALue:user forKey:@"user"]; // message.user = user;
如其他人所提到的,CD的反向关系.但是,您可以使用反向关系来添加消息,如果这更可读:
[[user mutableSETVALueForKey:@"messages"] addObject:message]; // [user addmessagesObject:message]
这也将维持“原”关系.
以上是大佬教程为你收集整理的ios – 将新属性添加到现有的核心数据实体关系全部内容,希望文章能够帮你解决ios – 将新属性添加到现有的核心数据实体关系所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。