在已分配的UIViewController上设置属性

时间:2012-03-01 18:35:57

标签: objective-c ios uiviewcontroller custom-controls init

我用这样的自定义init方法创建了一个简单的UIViewController:

-(id)initWithGroupNumber:(NSString *)groupNumber {
if ((self = [super init]) == nil) {
    return nil;
}
self.levelGroup = groupNumber;
return self; }

levelGroup是一个用.h文件写的属性

@property (nonatomic, retain) NSString  *levelGroup;

当我以这种方式调用上述方法时:

    LevelsViewController *lvc = [[LevelsViewController alloc]initWithGroupNumber:@"5"];

控制器已分配,但内部的所有属性都设置为nil。我不明白为什么。

2 个答案:

答案 0 :(得分:2)

替换

self.levelGroup = [[NSString alloc]init];

self.levelGroup = groupNumber; // actually uses your init value.

答案 1 :(得分:2)

首先,当您处理类型为mutable的子类(例如NSMutableString)的类时,请使用copy

所以,你的财产应该成为:

@property (nonatomic, copy) NSString *levelGroup;

然后,在UIViewController内合成属性

@synthesize levelGroup;

并在init中执行以下操作:

-(id)initWithGroupNumber:(NSString *)groupNumber {

    if (self = [super init]) {
       levelGroup = [groupNumber copy];
    }
    return self;
}

正如memory management guide所述,您不应在self.内和init内使用dealloc

使用您的媒体资源self.levelGroup获取或设置值。

请记得以dealloc发布:

[levelGroup release];

希望它有所帮助。