在应用程序委托中,我创建了一个用于参考的多个视图控制器的数组。但是,当我尝试在一个视图中更新数组时,它会在另一个视图中排出。

查看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 返回一个空数组。

有帮助吗?

解决方案

您可能正在重新对原始人群的阵列重新定位阵列。我会在您做的地方放一个断点

myData = [[NSMutableArray alloc] init];
看看它是否经常被调用,然后您想。

其他提示

我怀疑您尚未在代表中初始化MyData阵列。你应该打电话

[[NSMutableArray alloc]init];  

在你的

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

方法。否则,您要从代表回来的指针并没有指向nsmutablearray的实例

然后,我会向调试器核实您没有零回来,并且您正在获得相同的地址。如果其中的任何一个不是真的,我怀疑发生的事情发生的顺序就是问题

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top