3

我正在向 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 有问题,如果重新安装它可以解决我的问题。

4

1 回答 1

2

我认为这与accountaddChore:方法中的变量不在您期望的状态有关。

NSLog添加杂项之前的account变量,看看那里有什么。也许它是未定义的,你必须确保它指的是你想要的。

于 2012-05-31T21:20:51.067 回答