更新 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