Objective C类初始化错误

时间:2009-06-30 12:19:10

标签: objective-c variables class object

我有以下目标C类。这是为了在电影风格设置,标题场地ID等电影上存储信息。每当我尝试创建这个类的对象时:

Film film = [[Film alloc] init];

我得到以下错误:variable-sizedobject可能未初始化,静态分配的Objective-C类“Film”实例,静态分配的Objective-C类“Film”实例。

我对Objective C很新,可能仍然坚持C#思维模式,有人能告诉我我做错了什么吗?

谢谢迈克尔

代码:

// 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

1 个答案:

答案 0 :(得分:5)

您需要保存对象引用的变量为引用类型。您可以使用星号执行此操作 - 请参阅下文:

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

来自Java我经常将上述视为:

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

我倾向于将'reference'标记与类型相关联。但希望有更多精通C / C ++ / ObjC的人会告诉我为什么这是错的,以及在这种情况下实际调用的是“星号”。