添加新对象到存储时,核心数据关系丢失

时间:2012-06-04 04:07:54

标签: iphone ios sqlite core-data

我有一个名为guestlist的实体,它与一个名为guest的实体有1对多的关系。 Guestlist也与Invite实体有关系。

当我使用包含guest对象的guestlist列表创建Invite对象时。它可以很好地保存应用程序中的精细和显示。接下来,我创建另一个具有不同标题的邀请,一个新的访客列表对象,具有相同的访客。这也可以在应用程序中保存精美和显示。

问题在于,当我退出应用程序并重新登录时,只有最近的Invite会保留guestlist与guest虚拟机的关系。访客列表上的时间戳值存在,但与访客对象的关系为空。

以下是我用来设置对象并将其保存到商店中的代码。

Invite *invite = (Invite *)[NSEntityDescription insertNewObjectForEntityForName:@"Invite" 
                                                        inManagedObjectContext:anotherContext];

[invite setTitle:[inviteDetailsModel descriptionOfInvite]];

GuestList *guestlist = [NSEntityDescription insertNewObjectForEntityForName:@"GuestList" 
                                                           inManagedObjectContext:anotherContext];
[guestlist setGuestlist_to_invite:invite];
[guestlist setDateInvited:[NSDate date]];

for (Invitee *invitee in [inviteDetailsModel peopleInvited]) {

        Guest *guest = [NSEntityDescription insertNewObjectForEntityForName:@"Guest" 
                                                                  inManagedObjectContext:anotherContext];
        [guest setFirstName:invitee.firstName];
        [guest setLastName:invitee.lastName];
        [guest setABookID:invitee.guestID];

        [guestlist addGuestObject:guest];
    }
}

[invite setGuestlist:guestlist];

NSError *error = nil;
if(![anotherContext save:&error]) {
    NSLog(@"Couldnt save our invite data %@",error);
    return nil;
}

1 个答案:

答案 0 :(得分:3)

如果访客列表与访客列表具有一对多的关系,则访客只能连接到一个访客列表。在实践中,这意味着只有您分配给它的最后一个访客列表(无论是隐式还是显式)都会坚持。

您希望将该关系更改为多对多。