Ceci est ma première utilisation du mot-clé @dynamic. J'essaie d'utiliser des données de base. J'ai une classe faisant référence à un objet de type NSManagedObject. L'objet du type NSManagedObject a été créé automatiquement par XCode à partir d'une entité de données de base existante que j'avais configurée.La référence à l'accesseur @dynamic ne peut pas être compilée
Le code ne sera pas compilé en raison d'une erreur sur la ligne commençant par 'Client.FirstName'. Voir la note dans le commentaire sur cette ligne.
Puisque la référence est à un accesseur dynamique, je suis surpris que le compilateur signale cela comme une mauvaise référence. Cela semble assez simple, mais il me manque évidemment quelque chose. Je ne suis pas sûr de ce qui ne va pas.
Le code est le suivant:
aTestClass.h
#import <Foundation/Foundation.h>
@interface aTestClass : NSObject {
}
- (void) foo;
@end
aTestClass.m
#import "aTestClass.h"
#import "Client.h"
@implementation aTestClass
- (void) foo {
Client.FirstName = @"CompilerFail"; // Fails here: Property 'FirstName' not found in object of type 'Client'
}
@end
et les codes des clients est ce NSManagedObject, généré automatiquement par XCode 4.
Client.h
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
@interface Client : NSManagedObject {
//@private
}
@property (nonatomic, retain) NSString * FirstName;
@property (nonatomic, retain) NSString * LastName;
@property (nonatomic, retain) NSString * Company;
@property (nonatomic, retain) NSSet* Jobs;
@end
Client.m
#import "Client.h"
@implementation Client
@dynamic FirstName;
@dynamic LastName;
@dynamic Company;
@dynamic Jobs;
- (void)addJobsObject:(NSManagedObject *)value {
NSSet *changedObjects = [[NSSet alloc] initWithObjects:&value count:1];
[self willChangeValueForKey:@"Jobs" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects];
[[self primitiveValueForKey:@"Jobs"] addObject:value];
[self didChangeValueForKey:@"Jobs" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects];
[changedObjects release];
}
- (void)removeJobsObject:(NSManagedObject *)value {
NSSet *changedObjects = [[NSSet alloc] initWithObjects:&value count:1];
[self willChangeValueForKey:@"Jobs" withSetMutation:NSKeyValueMinusSetMutation usingObjects:changedObjects];
[[self primitiveValueForKey:@"Jobs"] removeObject:value];
[self didChangeValueForKey:@"Jobs" withSetMutation:NSKeyValueMinusSetMutation usingObjects:changedObjects];
[changedObjects release];
}
- (void)addJobs:(NSSet *)value {
[self willChangeValueForKey:@"Jobs" withSetMutation:NSKeyValueUnionSetMutation usingObjects:value];
[[self primitiveValueForKey:@"Jobs"] unionSet:value];
[self didChangeValueForKey:@"Jobs" withSetMutation:NSKeyValueUnionSetMutation usingObjects:value];
}
- (void)removeJobs:(NSSet *)value {
[self willChangeValueForKey:@"Jobs" withSetMutation:NSKeyValueMinusSetMutation usingObjects:value];
[[self primitiveValueForKey:@"Jobs"] minusSet:value];
[self didChangeValueForKey:@"Jobs" withSetMutation:NSKeyValueMinusSetMutation usingObjects:value];
}
@end
Il serait grandement utile si vous suivez les conventions de nommage de la langue; les cours commencent par des majuscules. Les méthodes et les propriétés commencent par des lettres minuscules. – bbum