0

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

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

4

2 回答 2

1

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

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

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

  2. 据我所知,一个 Cocoa Touch 应用程序无法将另一个 Cocoa Touch 应用程序保存的数据读取到设备上。操作系统将设备上运行的所有单个应用程序严格沙箱化,因此一个人无法读取另一个人保存的数据。

这个问题类似于我认为您要问的问题。

于 2009-11-23T08:02:43.300 回答
0

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

于 2009-11-23T09:34:37.880 回答