Как правильно передать NSArray / NSMutableArray от одного UIViewController к другому - PullRequest
0 голосов
/ 16 апреля 2010

Приложение для iphone, над которым я работаю, периодически завершает свою работу ... и я чувствую, что это из-за того, что я получаю доступ к общему NSArray среди нескольких контроллеров представления. Итак ...

Каков наилучший способ передать NSArray / NSMutableArray среди нескольких ViewControllers ... каждый из которых может изменить и / или установить его в ноль или что-то еще?

Спасибо

Ответы [ 2 ]

3 голосов
/ 16 апреля 2010

Существует два подхода, вообще говоря.

В первом подходе, когда вы создаете экземпляр своего следующего контроллера представления, вы можете установить свойство массива для «наследования» от текущего (который скоро станет предыдущим или родительским) контроллера представления:

MyNextViewController *_myNextViewController = [[MyNextViewController alloc] initWithNibName:@"MyNextViewController" bundle:nil];
_myNextViewController.myViewControllerArray = self.myViewControllerArray;
...

Во втором подходе вы можете создать свойство myAppDelegateArray в своем делегате приложения, создавая экземпляр массива, когда приложение инициализируется (или создается где-то еще, по требованию).

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

Например, в экземпляре MyNextViewController у вас может быть свойство с именем myViewControllerArray, и вы можете установить его следующим образом:

self.myViewControllerArray = [UIAppDelegate myAppDelegateArray]; 

Вы бы добавили оператор #define где-нибудь в файле констант приложения, например ::

#define UIAppDelegate ((MyAppDelegate *)[UIApplication sharedApplication].delegate)

или используйте полный вызов [UIApplication sharedApplication].delegate, если хотите.

Как правило, люди предпочитают подход с делегированием приложений, поскольку он децентрализует доступ к желаемому свойству.

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

0 голосов
/ 16 апреля 2010

вы, вероятно, не сохраняете его, оно освобождается, и вы пытаетесь получить к нему доступ снова. попробуйте отправить [myArray retain] туда, где вы его используете (в каждом из контроллеров), и [myArray release], когда вы закончите с ним

...