#objective-c #cocoa-touch #properties #nsmutablearray
#objective-c #cocoa-touch #свойства #nsmutablearray
Вопрос:
У меня есть a NSMutableArray
, и мне нужно получить к нему доступ из другого класса. Это то, что я сделал до сих пор;
-
Я объявил
NSMutableArray *muArr
в.h
файле, и@property(nonatomic, retain) NSMutableArray *muArr
. -
@synthasize muArr;
в.m
файле и, наконец, заполнил его:[muArr addObject: @"First"];
-
Теперь
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. Да, я выделил массив, а затем только заполнил его значениями