Нужно собирать объекты в NSArray, но - PullRequest
0 голосов
/ 13 декабря 2010

Очень нубский вопрос:

У меня есть несколько методов обработки событий в экземпляре контроллера (создан с Interface Builder); Мне нужно собрать объекты в массиве, к которому должны иметь доступ отдельные методы событий. Должен ли массив var идти в файл controller.m? Если это место для этого, могу я написать метод init?

Вот схема:

@implementation myController

NSArray *myVar = [NSArray array];   (Compiler doesn't like it)

- buttonClick
{
}

- menuSelection
{
}

@end

Ответы [ 2 ]

0 голосов
/ 13 декабря 2010

Компилятору это не нравится, потому что вы не можете вызывать функции в инициализаторе Си.

Предполагая, что это подкласс UIViewController, если вам нужен один массив на контроллер, вы должны сделать его переменной экземпляра и инициализировать его в -viewDidLoad, или вы можете сделать это в -initWithNibName:bundle:.Массив должен быть освобожден в -viewDidUnload или -dealloc соответственно.

Если ваш массив должен быть уникальным и совместно использоваться всеми контроллерами, проще всего создать метод класса, подобный так:

+(NSArray*) myVar
{
    static NSArray* theArray = nil;
    if (theArray == nil)
    {
        theArray = [[NSArray alloc] init];  // Do not use [NSArray array] because you need to own the returned object
                                            // until the program dies
    }
    return theArray;
}

NB. Я использовал NSArray везде, как и у вас, но, скорее всего, вам нужен NSMutableArray.

0 голосов
/ 13 декабря 2010

Если вы хотите иметь возможность добавлять объекты в ваш массив, вам нужно сделать его NSMutableArray.Инициализация глобальных переменных, как описано выше, может быть выполнена с помощью метода инициализации + (void).

Как правило, таких переменных следует избегать.Было бы лучше сохранить массив в контроллере и инициализировать его в методе init контроллера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...