3

雑用オブジェクトの新しいインスタンスを Account インスタンスに追加しています。どちらも NSManagedObjects であり、Account から Chore への関係は「1 対多」の関係です。

アカウント インスタンスは、雑用と同じ関係 (1 対多) の規則に従う他のオブジェクトをそれに挿入できるため、実行時に有効です。また、デバッガーではアカウント オブジェクトと newChore の両方が持つように、雑用も有効です。有効なメモリ アドレス。0x6d85cb0 は、このエラー レポートの時点での newChore およびアカウントのアドレスと同じではないため、指定されたアドレスのエラーにのみ問題があります。newChore は 0x06b74a70、アカウントは 0x06d49700 なので、0x6d85cb0 が何を指しているのかわかりません。

これは「[account addChoresObject:newChore];」というコード行です。次のエラーが生成されます。

これはコードの行です [account addChoresObject:newChore]; 次のエラーが発生します。2012-05-31 10:19:05.440 割り当て [61436:fb03] -[__NSCFSet エンティティ]: 認識されないセレクターがインスタンス 0x6d85cb0 に送信されました例外 '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];
    }
}

これは、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 がクラッシュする問題があったため、これまでファイルを正しく生成するのに苦労していました。 ioutlets と ibaction を自動生成しようとしています。他の誰かが xcode に問題を抱えていたのか、それを再インストールすることで問題が解決するのか疑問に思っています。

4

1 に答える 1

2

accountメソッドの変数がaddChore:期待どおりの状態にないという事実に関係していると思います。

NSLog雑用を追加する前にaccount変数を調べて、そこにあるものを確認してください。おそらく未定義であり、意図したものを参照していることを確認する必要があります。

于 2012-05-31T21:20:51.067 に答える