0

アプリケーション デリゲートでは、複数のビュー コントローラーが参照する配列を作成しました。ただし、一方のビューで配列を更新しようとすると、もう一方のビューでは空になります。

ビュー 1:

MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
dataTempForSearch = appDelegate.myData;

次に、オブジェクトを配列に挿入する xml パーサーがあります。

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
    if ([elementName isEqualToString:@"CompanyName"]) {
        // save values to an item, then store that item into the array...
        [item setObject:currentTitle forKey:@"title"];
        [item setObject:currentAddress forKey:@"address"];
        [item setObject:currentCity forKey:@"city"];
        [item setObject:currentCountry forKey:@"country"];

        [dataTempForSearch addObject:[item copy]];
    }
}

これにより、ビュー 1 ではすべて正常に返されますが、ビュー 2 では次のようになります。

- (void)viewDidLoad {
    MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
    dataTempForMap = appDelegate.myData;

    NSLog(@"myData appDelegate from: %@", dataTempForMap);      
}

この 2 番目のビューが読み込まれると、dataTempForMapは空の配列を返します。

4

2 に答える 2

0

デリゲートで myData 配列を初期化していないと思われます。あなたは電話しているはずです

[[NSMutableArray alloc]init];  

あなたの

- (void)applicationDidFinishLaunching:(UIApplication *)application {

方法。それ以外の場合、デリゲートから返されるポインターは、NSMutableArray のインスタンスを指していません。

次に、nil が返されていないこと、および同じアドレスが返されていることをデバッガーで確認します。これらのいずれかが真実でない場合、物事が起こっている順序が問題であると思われます

于 2009-11-09T16:59:12.590 に答える
0

元のデータが格納されたアレイに対して再初期化を行っている可能性があります。私はあなたがやっている場所にブレークポイントを置きます

myData = [[NSMutableArray alloc] init];
思ったよりも頻繁に呼び出されているかどうかを確認します。

于 2009-11-09T17:17:31.663 に答える