2009-11-09 91 views
0

在應用程序委託中,我爲多個視圖控制器創建了一個數組以供引用。但是,當我嘗試在一個視圖中更新數組時,它在另一個視圖中變爲空。更新appDelegate中的變量

視圖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 I具有:

- (void)viewDidLoad { 
    MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate]; 
    dataTempForMap = appDelegate.myData; 

    NSLog(@"myData appDelegate from: %@", dataTempForMap);  
} 

當該第二視圖被加載,dataTempForMap返回一個空數組。

+0

我想你可能需要顯示myData的初始化位置和屬性設置的任何地方。 – 2009-11-09 16:55:58

回答

0

您可能會重新初始化原始數組。我會在你正在做的地方放上一個斷點

myData = [[NSMutableArray alloc] init];
,看看它是否被你更經常地調用,然後你想。

+0

你是對的...我在我的代碼中進一步在其他地方...我是一個eediot哈哈 – rson 2009-11-09 17:40:29

+0

在那裏做了,發生在我們最好的。 – 2009-11-09 18:40:35

0

我懷疑你沒有初始化委託中的myData數組。你應該在你

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

方法調用

[[NSMutableArray alloc]init]; 

。否則指向代理的指針不會指向NSMutableArray的一個實例

然後,我將與調試器一起檢查您是否沒有得到無回,並且您得到的是相同的地址。如果其中任何一個都不是真的,我懷疑事情發生的順序是問題

+0

我其實就是這麼做的。對於記錄來說,它也是一個NSMutableArray。 – rson 2009-11-09 17:04:37