代码之家  ›  专栏  ›  技术社区  ›  rson

更新AppDelegate中的变量

  •  0
  • rson  · 技术社区  · 16 年前

    在应用程序委托中,我创建了一个数组,供多个视图控制器参考。但是,当我尝试在一个视图中更新数组时,它在另一个视图中显示为空。

    视图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 返回空数组。

    2 回复  |  直到 16 年前
        1
  •  0
  •   Bryan McLemore    16 年前

    您可能正在重新初始化原始填充数组的数组。我会在你做的地方设置一个断点

    myData = [[NSMutableArray alloc] init];
    看看它是否比你想象的更频繁。
        2
  •  0
  •   Joe Cannatti    16 年前

    我怀疑您没有在委托中初始化mydata数组。你应该打电话来

    [[NSMutableArray alloc]init];  
    

    在你

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

    方法。否则,从委托返回的指针没有指向nsmutableArray的实例

    然后我会和调试程序确认您没有得到nil,并且您得到的是相同的地址。如果这些都不是真的,我怀疑事情发生的顺序就是问题所在。