访问可变数组值

时间:2009-11-23 07:27:19

标签: objective-c cocoa nsmutablearray

我在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];

请告诉我它崩溃的原因以及这样做的正确方法。

2 个答案:

答案 0 :(得分:1)

如果您确实运行了2个不同的Objective-C应用程序,请记住每个应用程序都有自己的[UIApplication sharedApplication]。如果我正确理解您的问题,您假设您将能够使用此机制在应用程序之间传递信息,而事实并非如此。每个应用程序都有自己的sharedApplication和相应的应用程序委托,并且无法看到对方的成员。

由于您使用的是UIApplication(而非NSApplication),我推断您正在使用Cocoa Touch(适用于iPhone和iPod Touch),因此您可能对 可用的机制感兴趣用于在应用程序间共享数据有许多可能的方法,包括自定义URL处理程序(允许一个应用程序使用某些特定参数启动另一个应用程序),或使用依赖于网络的同步机制,您可以在其中存储来自某些共享服务器位置的两个应用程序的数据互联网。但是,您应该记住:

  1. 任何时候,只有一个应用程序可以在Cocoa Touch设备上运行。因此,应用程序委托的内存中成员变量将在实例化它们的应用程序退出后立即释放(为其他应用程序让路)。

  2. 我无法知道一个Cocoa Touch应用程序将另一个Cocoa Touch应用程序保存的数据读取到设备上。操作系统严格对设备上运行的所有单个应用程序进行沙盒处理,以便无法读取另一个应用程序保存的数据。

  3. This question类似于我的想法。

答案 1 :(得分:0)

如果您在Mac OS X应用程序中使用Objective-C和Cocoa 您可以找到许多系统在两个正在运行的应用程序之间传递信 使用通知,文件系统,远程对象,PasteBoard 一些有用的信息可以在这里找到: http://developer.apple.com/mac/library/navigation/index.html#section=Topics&topic=Interapplication%20Communication