2013-08-16 11 views
2

我有一个一到多的关系,以存储有关的电子邮件地址(这就是所谓的TypedValue,因为它也包括电子邮件类型,如个人,工作等)信息的另一个实体联系人实体。如何删除/替换有序至多CoreData关系中的对象?

这种关系(称为“电子邮件”,自然),还下令,让我可以在表视图中显示的电子邮件地址的联系人的列表,并允许用户删除或修改每一个。据我所知,他们需要进行排序,以便我可以判断哪一个被删除/修改:例如,如果用户点击第1行中的删除按钮,则应从关系中删除第二个电子邮件地址。没有被命令,我不知道哪一个要删除。

在生成NSManagedObject子类中,我得到一个NSOrderedSet属性的类,并且CoreData提供有益的.h文件中的一些访问者:

@interface Contact (CoreDataGeneratedAccessors) 
- (void)insertObject:(TypedValue *)value inEmailsAtIndex:(NSUInteger)idx; 
- (void)removeObjectFromEmailsAtIndex:(NSUInteger)idx; 
- (void)insertEmails:(NSArray *)value atIndexes:(NSIndexSet *)indexes; 
- (void)removeEmailsAtIndexes:(NSIndexSet *)indexes; 
- (void)replaceObjectInEmailsAtIndex:(NSUInteger)idx withObject:(TypedValue *)value; 
- (void)replaceEmailsAtIndexes:(NSIndexSet *)indexes withEmails:(NSArray *)values; 
- (void)addEmailsObject:(TypedValue *)value; 
- (void)removeEmailsObject:(TypedValue *)value; 
- (void)addEmails:(NSOrderedSet *)values; 
- (void)removeEmails:(NSOrderedSet *)values; 
@end 

我的问题是,只有一些工作。 addEmailsObject:工作得很好,但删除或替换方法没有。如果我尝试更换对象的组中的一个与此调用:

// newVal is a properly-built object requested from the managed object context 
[self replaceObjectInEmailsAtIndex:index withObject:newVal]; 

我得到一个讨厌的错误:

2013-08-16 16:51:19.687 AppName[43837:c07] -[Contact replaceObjectInEmailsAtIndex:withObject:]: unrecognized selector sent to instance 0xa56a800 2013-08-16 16:51:19.694 AppName[43837:c07] * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Contact replaceObjectInEmailsAtIndex:withObject:]: unrecognized selector sent to instance 0xa56a800'

从我读过,这可以如果对象发生制调用(在这种情况下为Contact对象)是使用常规的alloc/init创建的,而不是从托管对象上下文中请求的,但我正确地执行了该部分。

我也试图得到NSOrderedSet对象的可变副本,以便进行更新,然后替换集:

NSMutableOrderedSet *newSet = [self.emails mutableCopy]; 
[newSet replaceObjectAtIndex:index withObject:newVal]; 
[self setEmails:newSet]; 

这并没有抛出任何错误,但做了一些靠不住的:我的界面启动显示不正确的值,我不知道发生了什么。

所以:什么是替换和删除对象的正确方法,如果没有使用CoreData声称提供存取器?

回答

1

自动生成的代码具有防止它的工作的错误。你的解决方法是创建一个可变副本,更新和设置应该工作。您在UI中看到的任何问题都应该是您监视更改/将数据重新加载到UI的一个方面。

错误参考:here

+0

我真的很希望,我只是错过了一些愚蠢的事,我的情况是从其它问题有些不同。令人难以置信的是,他们会在这里自动生成破碎的代码。 –

+0

后续行动:你对用户界面问题是正确的。我正在做一些愚蠢的事情来为表提供数据,并没有正确更新它。现在使用可变副本似乎工作得很好。再次感谢! –

相关问题