Установить свойство для выделенного UIViewController - PullRequest
0 голосов
/ 01 марта 2012

Я создал простой 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"];

контроллер выделен, но все свойства внутри установлены в ноль. Я не могу понять, почему.

Ответы [ 2 ]

2 голосов
/ 01 марта 2012

Прежде всего, когда вы имеете дело с классами, которые имеют подкласс типа 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;
}

Как написано в руководстве по управлению памятью , не следует использовать self. внутри init и в dealloc.

Используйте вашу собственность self.levelGroup, чтобы получить или установить значение.

Не забудьте освободить в dealloc:

[levelGroup release];

Надеюсь, это поможет.

2 голосов
/ 01 марта 2012

Замените ваш

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

на

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