Доступ к NSMutableArray из другого класса

#objective-c #cocoa-touch #properties #nsmutablearray

#objective-c #cocoa-touch #свойства #nsmutablearray

Вопрос:

У меня есть a NSMutableArray , и мне нужно получить к нему доступ из другого класса. Это то, что я сделал до сих пор;

  1. Я объявил NSMutableArray *muArr в .h файле, и @property(nonatomic, retain) NSMutableArray *muArr .

  2. @synthasize muArr; в .m файле и, наконец, заполнил его:

    [muArr addObject: @"First"];

  3. Теперь SecondView я добавил оператор импорта #import "FirstView.h" и написал: FirstView *frv = [[FirstView alloc]init]; тогда NSLog(@"%i",[frv.muArr count]);

Эти строки кода написаны в viewDidLoad методе. и когда NSLog он был напечатан, я получил 0 записи вместо 1 .

Почему это так? что я сделал не так, и может кто-нибудь показать мне пример кода / учебника?

Комментарии:

1. Каким методом вы заполняете muArr (где находится AddObject: call)?

2. Я написал это внутри didSelectRowAtIndexPath , поэтому, когда пользователь нажимает на ячейку / строку. этот метод выполняется, и muArr заполняется.

3. Вы когда-нибудь действительно создавали NSMutableArray?? Я не вижу инструкции для этого.

Ответ №1:

Вы заполняете muArr didSelectRowAtIndexPath , который не вызывается, пока вы не выберете строку. Вызывая init ваш FirstView, вы создаете новый FirstView, а затем немедленно проверяете количество muArr . Количество равно 0, потому что вы еще не выбрали ни одной строки..

Комментарии:

1. Это похоже на то, что когда я нажимаю на строку, muArr она заполняется, и страница перенаправляется FirstView , поэтому мне нужно получить доступ muArr и получить ее количество.

2. Вы имеете в виду, что он перенаправляется на SecondView ? Ваши шаги похожи на (1) загружается FirstView, (2) пользователь нажимает на строку, (3) загружается второе представление, и вам нужно проверить значение массива FirstView. Если это так, вам нужно передать ссылку FirstView на secondView — вы создаете новый, другой FirstView, используя alloc и init .

Ответ №2:

Вам нужно создать свойство (таким же образом, как вы создаете muArr) в классе secondView

Шаг 1): Допустим, arrOfSecondView, и вы его синтезируете

Шаг 2) Теперь вы можете добавить свои данные muArr в arrOfSecondView

    SecondView *secondView = [[SecondView alloc]init];
   secondView .arrOfFirstView = muArr;
   //and i guess you are pushing to secondView controller
  

Шаг 3) Проверьте количество arrOfFirstView

Комментарии:

1. Почему я должен это делать, разве это не то же muArr самое, что прямой доступ? Если muArr вернуть количество 0 , не arrOfFirstView вернется 0 ?

2. НЕТ, как может быть muArr будет равен нулю, потому что вы инициализируете и добавляете объект в первом представлении и хотите использовать во втором представлении.

Ответ №3:

Вы выделяете массив? Прежде чем добавлять в него элементы, вы должны выделить его с

 myArr = [[NSMutableArray alloc] init];
  

Если вы этого не сделаете, вызов [AddObject] не приведет к сбою программы, но и не будет иметь никакого эффекта. И массив count навсегда останется нулевым.

@synthesize, вопреки распространенному мнению, не выделяет ivar. Он просто генерирует метод получения и, необязательно, метод установки в классе.

Комментарии:

1. Да, я выделил массив, а затем только заполнил его значениями