Ошибка при сохранении NS (Mutable) Array в классе - PullRequest
0 голосов
/ 25 августа 2009

Мне трудно работать с массивами. Исходя из AS2 / AS3 и сборка мусора является новым для меня ...;)

Это не полный код, только части, которые имеют значение.

.h-file
@interface HelperViewController : UIViewController {
    NSMutableArray *pagesNumbers;
}
@property (nonatomic, retain) NSMutableArray *pagesNumbers;

.m-file
@synthesize pagesNumbers;
-(void)loadView {
    pagesNumbers = [NSMutableArray arrayWithObjects:[NSNumber numberWithInt:1], [NSNumber numberWithInt:1], [NSNumber numberWithInt:1], [NSNumber numberWithInt:1], nil];
    NSLog(@"pagesNumbers: %@", pagesNumbers); // WORKS!
}
-(void)changePage:(id)sender {
    NSLog(@"pagesNumbers: %@", pagesNumbers); // PROBLEM*
}

Проблема * в том, что она работает, когда функция вызывается viewDidLoad, но ОТКРЫВАЕТСЯ, когда позже вызывается UIButton с этим (очень информативным) сообщением:

[Сессия началась в 2009-08-25 11:12:51 +0200.] GNU gdb 6.3.50-20050815 (версия Apple gdb-966) (вторник, 10 марта 02:43:13 UTC 2009) Copyright 2004 Free Software Foundation, Inc. GDB - это бесплатное программное обеспечение, на которое распространяется стандартная общественная лицензия GNU, и вы добро пожаловать изменить его и / или распространять его копии при определенных условиях. Введите «показать копирование», чтобы увидеть условия. На GDB нет абсолютно никаких гарантий. Тип "показать гарантию" для деталей. Эта GDB была настроена как «i386-apple-darwin» .sharedlibrary apply-load-rules all Присоединение к процессу 13197.

Может кто-нибудь помочь, пожалуйста?

С уважением, Эрик.

1 Ответ

2 голосов
/ 25 августа 2009

Похоже, что pagesNumbers не сохраняется.

Попробуйте добавить:

[pagesNumbers retain];

после инициализации массива в loadview.

Я считаю, что arrayWithObjects вернет автоматически освобожденный массив, поэтому вам нужно явно сохранить его, если вы захотите использовать его позже.

Редактировать, только что заметил PagesNumbers также является свойством. Вы инициализируете pagesNumbers напрямую, чтобы синтезированный установщик не вызывался (и не сохранялся автоматически). Если вы хотите использовать установщик свойств, я считаю, что вам нужно ссылаться на pagesNumbers, используя self, то есть

self.pagesNumbers = [NSMutableArray arrayWithObjects.....
...