делая NSArray глобальным - PullRequest
2 голосов
/ 27 мая 2011

У меня есть NSarray, к которому я хочу получить доступ из всех моих методов (я хочу использовать Global), я собираюсь заполнить этот массив одним из моих методов, определенных в файле .m (только один раз).мой вопрос ... действительно ли возможно объявить NSArray в .h и определить его место где-то еще, или он просто должен быть определен, когда он объявлен (инициализация).

МОЙ ТЕКУЩИЙ КОД

.h файл

@interface slots2ViewController : UIViewController {
NSArray* paylinesArr;
}

я вызываю следующий метод из ViewDidLoad

.m файл

-(void)init_payline_arr
  {
NSString* filePath = @"/Users/net4uonline/Desktop/slots2/paylines.txt";//filepath...
NSString *fileContents = [NSString stringWithContentsOfFile: filePath];
paylinesArr = [fileContents componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
    }

я не могу использоватьМассив paylinesArr из других методов, приложение вылетает, если следующая функция вызывается

-(IBAction)ShowVal

 {
  NSLog(@"number of elements! %@",[paylinesArr count]);
  }

Или я должен вместо этого использовать NSMutabbleArray?

если вы хотите посмотреть, я загрузил видео на рабочем столе, пока использую инструменты отладки! ссылка на видео

в этом видео я нажимаю кнопку записи отладчика (у меня включен ns zombie и также сохраняется счет), приложение запускается, я нажимаю кнопку вращения иочевидно, он падает ... тогда я покажу вам код, который имеет

   paylinesArr = [[fileContents componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]] retain]; 

, который сохраняет paylineArr

1 Ответ

3 голосов
/ 27 мая 2011

NSMutableArray тебе не поможет!Причина вашей ошибки в том, что ваша переменная paylinesArr является переменной автоматического выпуска, поэтому, вероятно, она была освобождена до вызова ShowVal.Попробуйте сохранить это как

-(void)init_payline_arr {
    ...
    paylinesArr = [[fileContents componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]] retain];
    ...
}

Это должно работать.Но не забудьте выпустить его методом viewDidUnload:

- (void)viewDidUnload {
    [super viewDidUnload];
    ...
    [paylinesArr release];
}
...