我正在向 Account 实例添加一个 Chore 对象的新实例。它们都是 NSManagedObjects,从 Account 到 Chore 的关系是“一对多”关系。
帐户实例在运行时有效,因为我可以向其插入其他对象,这些对象遵循与 chore 相同的关系规则(1 到多个),并且 chore 在调试器中也是有效的,因为帐户对象和 newChore 都有有效的内存地址。唯一的问题是给出的地址错误,因为 0x6d85cb0 与报告此错误时 newChore 和帐户的地址不同。0x06b74a70 for newChore 和 0x06d49700 for account,所以我不知道 0x6d85cb0 指的是什么。
这是代码行“[account addChoresObject:newChore];” 这会产生以下错误。
这是代码行 [account addChoresObject:newChore]; 产生以下错误。2012-05-31 10:19:05.440 分配[61436:fb03]-[__NSCFSet 实体]:无法识别的选择器发送到实例 0x6d85cb0 2012-05-31 10:19:05.441 分配[61436:fb03] *由于未捕获而终止应用程序异常“NSInvalidArgumentException”,原因:“-[__NSCFSet 实体]:无法识别的选择器发送到实例 0x6d85cb0”
这是生成错误的方法的代码。
-(void)addChore:(Chore *)newChore
{
[account addChoresObject:newChore];
NSError *error;
[managedObjectContext save:&error];
if (error != nil) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error Adding chore"
message:@"program not able to add new chore to account"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil, nil];
[alert show];
}
}
这是 Account 类的接口,由 xcode 生成:
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
@class Chore, Gift, Goal, Operation;
@interface Account : NSManagedObject
@property (nonatomic, retain) NSNumber * balance;
@property (nonatomic, retain) NSDate * birthday;
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSData * photo;
@property (nonatomic, retain) NSSet *chores;
@property (nonatomic, retain) NSSet *gifts;
@property (nonatomic, retain) NSSet *goals;
@property (nonatomic, retain) NSSet *operations;
@end
@interface Account (CoreDataGeneratedAccessors)
- (void)addChoresObject:(Chore *)value;
- (void)removeChoresObject:(Chore *)value;
- (void)addChores:(NSSet *)values;
- (void)removeChores:(NSSet *)values;
- (void)addGiftsObject:(Gift *)value;
- (void)removeGiftsObject:(Gift *)value;
- (void)addGifts:(NSSet *)values;
- (void)removeGifts:(NSSet *)values;
- (void)addGoalsObject:(Goal *)value;
- (void)removeGoalsObject:(Goal *)value;
- (void)addGoals:(NSSet *)values;
- (void)removeGoals:(NSSet *)values;
- (void)addOperationsObject:(Operation *)value;
- (void)removeOperationsObject:(Operation *)value;
- (void)addOperations:(NSSet *)values;
- (void)removeOperations:(NSSet *)values;
@end
和杂项类是:
@interface Chore : NSManagedObject
@property (nonatomic, retain) NSString * interval;
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSString * reward;
@property (nonatomic, retain) Account *account;
@end
在我看来,选择器似乎发送到了错误的地址。我尝试使用 Clean 删除潜在的错误构建文件。在此之前我很难正确生成文件,因为生成的文件是用应用程序的名称调用的,而不是用类的名称调用的,而且一些源文件也有问题,这些文件会在 xcode 时崩溃试图自动生成 iboutlets 和 ibaction。我想知道是否有其他人对 xcode 有问题,如果重新安装它可以解决我的问题。