2010-12-12 28 views
0

J'ai géré les objets donnés ci-dessous; avertissement suivant soulevé pour addCratesObject dans la méthode initFruitStand. Pourquoi se plaint-il qu'il ne correspond pas à la signature, bien que cela corresponde? Quel est le problème?signature de la méthode de l'objet géré

En fonction '- [FruitStandViewController initFruitStand:]':

'FruitStand' ne peut pas répondre à -addCratesObject:

« (messages sans signature de la méthode de mise en correspondance sera supposé revenir 'id' et accepter '...' comme arguments.)

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

Bien que je ne vois pas la raison pour laquelle vous en auriez besoin, essayez d'importer votre en-tête Crate.h dans votre interface FruitStand.h au lieu d'utiliser la déclaration @class. – Rog

+0

model modeler les crée de cette façon. – lockedscope

Répondre

0

de toute façon j'ai trouvé le problème. il existe une autre version du même fichier dans un autre dossier qui semble être supprimé mais existe toujours et qui provoque l'avertissement.

+0

Cela fait partie de la fonctionnalité de gestion des versions de base des données. Supprimez manuellement le fichier en premier, puis créez le nouveau. – pokstad

1

Comme dit Les; "C'est assez bizarre, Gus." Essayez le nettoyage du projet et la reconstruction. Vous pouvez également utiliser l'élément de menu "Pré-traitement" pour montrer ce que le compilateur essaie de compiler pour MyViewController.m. Voir ce que le compilateur pense que la définition de FruitStand est dans cette unité de compilation.