2010-12-12 8 views
0

以下の管理オブジェクトがあります。 initFruitStandメソッドのaddCratesObjectに対して警告が発生した後に発生します。一致しても署名と一致しないと不平を言うのはなぜですか?何が問題ですか?機能 で管理オブジェクトメソッドシグネチャ

' - [FruitStandViewController initFruitStand:]':

'FruitStand' -addCratesObjectに応答しないことがあります。

「(メッセージをマッチングメソッドシグネチャなし を返すように仮定されます'ID' と受け入れる '...' 引数として。)

MyViewController.m

#import "FruitStand.h" 
#import "Crate.h" 

- (IBAction) initFruitStand: (id) sender { 
    FruitStand * stand = (FruitStand *) [NSEntityDescription 
     insertNewObjectForEntityForName:@"FruitStand" 
     inManagedObjectContext:self.managedObjectContext]; 

    Crate * crateOne = (Crate *) [NSEntityDescription 
     insertNewObjectForEntityForName:@"Crate" 
     inManagedObjectContext:self.managedObjectContext]; 

    [stand addCratesObject:crateOne]; 
} 

FruitStand.h

#import <CoreData/CoreData.h> 
@class Crate; 
@interface FruitStand : NSManagedObject 
{ 
} 
@property (nonatomic, retain) NSString* standName; 
@property (nonatomic, retain) NSSet* crates; 
@end 

@interface FruitStand (CoreDataGeneratedAccessors) 
- (void)addCratesObject:(Crate *)value; 
- (void)removeCratesObject:(Crate *)value; 
- (void)addCrates:(NSSet *)value; 
- (void)removeCrates:(NSSet *)value; 
@end 

FruitStand.m

#import "FruitStand.h" 
#import "Crate.h" 
@implementation FruitStand 
@dynamic standName; 
@dynamic crates; 
@end 

Crates.h

#import <CoreData/CoreData.h> 
@interface Crate : NSManagedObject 
{ 
} 
@property (nonatomic, retain) NSSet* fruits; 
@end 

@interface Crate (CoreDataGeneratedAccessors) 
- (void)addFruitsObject:(NSManagedObject *)value; 
- (void)removeFruitsObject:(NSManagedObject *)value; 
- (void)addFruits:(NSSet *)value; 
- (void)removeFruits:(NSSet *)value; 
@end 

Crates.m

#import "Crate.h" 
@implementation Crate 
@dynamic fruits; 
@end 
+1

理由がわかりませんが、@ class宣言を使用する代わりに、FruitStand.hインターフェイスでCrate.hヘッダーをインポートしてみてください。 – Rog

+0

データモデラーがそのように作成します。 – lockedscope

答えて

0

とにかく問題が見つかりました。同じファイルの別のバージョンが別のフォルダにあり、削除されているように見えますが、まだ存在しており、警告が表示されます。

+0

これは、コアデータのバージョン管理機能の一部です。手動でファイルを手動で削除し、新しいファイルを作成します。 – pokstad

1

レは、前記のように。 "それはかなり奇妙な、ガスです。"

プロジェクトをクリーニングして再構築してください。あるいは、「前処理」メニュー項目を使用して、コンパイラがMyViewController.mに対してコンパイルしようとしているものを表示します。 FruitStandの定義がコンパイル単位内にあるとコンパイラが判断した内容を参照してください。