Доступ к изменяемому значению массива

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

savedLocation = [[NSMutableArray alloc] init];
 savedLocation = [[NSMutableArray arrayWithObjects:
       [NSNumber numberWithInteger:0],
       nil] retain];

Ниже приведен код, в котором я пытаюсь получить доступ к значениям массива в другом приложении через appdelegate:

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
 NSInteger selection = [[appDelegate.savedLocation objectAtIndex:0] integerValue];

Но он рушится:

NSInteger selection = [[appDelegate.savedLocation objectAtIndex:0] integerValue];

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


person need    schedule 23.11.2009    source источник
comment
Что за сообщение о сбое в консоли?   -  person nduplessis    schedule 23.11.2009
comment
Кроме того, утечка происходит по адресу savedLocation = [[NSMutableArray alloc] init]; Это избыточно, поскольку [NSMutableArray arrayWithObjects:] возвращает новый автоматически выпущенный объект.   -  person nduplessis    schedule 23.11.2009
comment
Пожалуйста, прочтите документацию Apple по управлению памятью, поскольку вы еще не знаете, как Cocoa это делает.   -  person Mike Abdullah    schedule 23.11.2009


Ответы (2)


Если у вас действительно работает 2 разных приложения Objective-C, имейте в виду, что у каждого из них будет свое собственное [UIApplication sharedApplication]. Если я правильно понял ваш вопрос, вы предполагаете, что сможете передавать информацию между приложениями, используя этот механизм, а это просто не так. Каждое приложение будет иметь собственное sharedApplication и соответствующий делегат приложения и не сможет видеть членов другого приложения.

Поскольку вы используете UIApplication (а не NSApplication), я предполагаю, что вы используете Cocoa Touch (для iPhone и iPod Touch), и поэтому вас, вероятно, интересуют механизмы, которые доступны для обмена данными. между приложениями. Существует ряд возможных подходов, в том числе настраиваемый обработчик URL-адресов (позволяющий одному приложению запускать другое приложение с некоторыми конкретными параметрами) или использование механизма синхронизации, зависящего от сети, при котором вы храните данные из обоих приложений в некотором общем месте на сервере на Интернет. Однако следует иметь в виду, что:

  1. На устройстве Cocoa Touch одновременно будет работать только одно из ваших приложений. Таким образом, переменные-члены в памяти делегата приложения будут выпущены, как только приложение, создавшее их, выйдет (чтобы освободить место для другого приложения).

  2. Я не знаю, чтобы одно приложение Cocoa Touch могло читать данные, сохраненные другим приложением Cocoa Touch, на устройство. Операционная система строго изолирует все отдельные приложения, работающие на устройстве, поэтому одно не может читать данные, сохраненные другим.

Этот вопрос похож на то, что, я думаю, вы задаете .

person Gene Goykhman    schedule 23.11.2009

Если вы используете Objective-C и Cocoa для приложения Mac OS X, вы можете найти множество систем для передачи информации между двумя запущенными приложениями, например, с помощью уведомлений, файловой системы, удаленных объектов, панели PasteBoard, здесь можно найти полезную информацию: http://developer.apple.com/mac/library/navigation/index.html#section=Topics&topic=Interapplication%20Communication

person scriba    schedule 23.11.2009