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);      
}

加载第二个视图时,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 回答