2009-06-30 7 views
2

J'ai la classe d'objectif C suivante. Il est de stocker des informations sur un film pour un cadre de style cinéma, lieu Titre ID, etc. Chaque fois que je tente de créer un objet de cette classe:Erreurs d'initialisation de la classe Objective C

Film film = [[Film alloc] init]; 

je reçois les erreurs suivantes: variable sizedobject ne peut pas être initialisé , instance attribuée statiquement de la classe Objective-C "Film", instance attribuée statiquement de la classe Objective-C "Film". Je suis un peu nouveau à l'objectif C et je suis probablement toujours coincé dans un état d'esprit C#, quelqu'un peut-il me dire ce que je fais mal?

Merci michael

Code:

// Film.m 
#import "Film.h" 
static NSUInteger currentID = -1; 

@implementation Film 

@synthesize filmID, title, venueID; 

-(id)init { 

    self = [super init]; 

    if(self != nil) { 
     if (currentID == -1) 
     { 
      currentID = 1; 
     } 
     filmID = currentID; 
     currentID++; 
     title = [[NSString alloc] init]; 
     venueID = 0; 
    } 

    return self; 
} 

-(void)dealloc { 

    [title release]; 
    [super dealloc]; 
} 

+(NSUInteger)getCurrentID { 
    return currentID; 
} 

+(void)setCurrentID:(NSUInteger)value { 
    if (currentID != value) { 
     currentID = value; 
    } 
} 

@end 

// Film.h 
#import <Foundation/Foundation.h> 


@interface Film : NSObject { 
    NSUInteger filmID; 
    NSString *title; 
    NSUInteger venueID; 
} 

+ (NSUInteger)getCurrentID; 
+ (void)setCurrentID:(NSUInteger)value; 

@property (nonatomic) NSUInteger filmID; 
@property (nonatomic, copy) NSString *title; 
@property (nonatomic) NSUInteger venueID; 

//Initializers 
-(id)init; 

@end 
+0

désolé de la mauvaise mise en forme, ne pas comprendre comment créer un bloc de code ici encore –

Répondre

5

Vous avez besoin de votre variable qui contient la référence à votre objet à être d'un type de référence. Vous faites cela en utilisant un astérisque - voir ci-dessous:

Film *film = [[Film alloc] init]; 

venant de Java Je pense souvent de ce qui précède que:

Film* film = [[Film alloc] init]; 

J'ai tendance à associer le marqueur « de référence » avec le type. Mais j'espère que quelqu'un de plus versé en C/C++/ObjC me dira pourquoi c'est faux, et ce que l'astérisque est appelé dans ce contexte.

+0

Merci vous génie. Je ne comprends toujours pas complètement les pointeurs, la gestion de la mémoire est gérée pour vous en C#. –

+3

@teabot: venant du monde C/C++, j'appellerais ça un pointeur plutôt qu'une référence. i.e .: "le film est un pointeur vers une instance de classe Film". Les références sont spécifiques à C++ et utilisent le '&' à la place du '*'. En Objective-C, puisque toutes les variables d'objet doivent être des pointeurs, le mot "pointer" est généralement supprimé: "film est une instance de classe Film". –

+0

Merci pour l'information @eJames – teabot

Questions connexes