0

appdelegate で 1 つの可変配列を作成しました。別のアプリでその可変配列の値を取得しようとしています。しかし、その時点でクラッシュしています。以下は、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 と対応するアプリ デリゲートがあり、他のアプリのメンバーを見ることはできません。

あなたは (NSApplication ではなく) UIApplication を使用しているため、Cocoa Touch (iPhone および iPod Touch 用) を使用していると推測されます。おそらく、アプリケーション間でデータを共有するために利用できるメカニズムに関心があるでしょう。カスタム URL ハンドラー (1 つのアプリが特定のパラメーターを使用して他のアプリを起動できるようにする) や、両方のアプリケーションからのデータを共有サーバーの場所に保存するネットワーク依存の同期メカニズムを使用するなど、考えられるアプローチは多数あります。インターネット。ただし、次の点に注意してください。

  1. 一度に Cocoa Touch デバイスで実行できるアプリケーションは 1 つだけです。そのため、アプリ デリゲートのメモリ内メンバー変数は、それらをインスタンス化したアプリが終了するとすぐに解放されます (他のアプリに道を譲るため)。

  2. ある Cocoa Touch アプリケーションが、別の Cocoa Touch アプリケーションによってデバイスに保存されたデータを読み取る方法を私は知りません。オペレーティング システムは、デバイス上で実行されているすべての個々のアプリケーションを厳密にサンドボックス化するため、別のアプリケーションによって保存されたデータを読み取ることはできません。

この質問は、あなたが尋ねていると私が思うものに似ています。

于 2009-11-23T08:02:43.300 に答える
0

Mac OS X アプリケーションに Objective-C と Cocoa を使用している場合、実行中の 2 つのアプリケーション間で情報を渡すシステムが多数あります。つまり、通知、ファイル システム、遠隔オブジェクト、PasteBoard などの有用な情報がここにあります: http: //developer.apple.com/mac/library/navigation/index.html#section=トピック&topic=Interapplication%20Communication

于 2009-11-23T09:34:37.880 に答える