更新 appDelegate 中的变量

Posted

技术标签:

【中文标题】更新 appDelegate 中的变量【英文标题】:updating a variable in appDelegate 【发布时间】:2009-11-09 16:49:14 【问题描述】:

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

查看 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 的初始化位置以及属性设置的位置。 【参考方案1】:

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

myData = [[NSMutableArray alloc] init];
看看它是否比你想象的更频繁地被调用。

【讨论】:

你说得对...我在代码中更靠后的地方做这件事...我是个 eediot 哈哈【参考方案2】:

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

[[NSMutableArray alloc]init];  

在你的

- (void)applicationDidFinishLaunching:(UIApplication *)application 

方法。否则,您从委托返回的指针不指向 NSMutableArray 的实例

然后我会用调试器检查你没有得到 nil 并且你得到了相同的地址。如果其中任何一个都不正确,我怀疑事情发生的顺序就是问题

【讨论】:

我实际上就是这样做的。作为记录,它也是一个 NSMutableArray。

以上是关于更新 appDelegate 中的变量的主要内容,如果未能解决你的问题,请参考以下文章

Incompatible pointer types assiging to "UIViewController" *_Nullable' from 'AppDel

AppDelegate 类型 var 不是成员,除非在 func 中(见图)

AppDelegate 类型的值没有成员 managedObjectContext

swift : AppDelegate 和 NSManagedObjectContext 为 nil

在 AppDelegate 中动画后不显示根视图控制器

iOS之深入解析AppDelegate的重构