обновление переменной в appDelegate - PullRequest
0 голосов
/ 09 ноября 2009

В приложении-делегате я создал массив для ссылки на несколько контроллеров представления. Однако, когда я пытаюсь обновить массив в одном представлении, он получается пустым в другом.

Вид 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 ]

0 голосов
/ 09 ноября 2009

Возможно, вы реинициализируете массив поверх исходного заполненного. Я бы поставил точку останова на месте, где вы делаете

myData = [[NSMutableArray alloc] init];
, и посмотрел бы, будет ли он вызываться чаще, чем вы думали.
0 голосов
/ 09 ноября 2009

Я подозреваю, что вы не инициализировали массив myData в делегате. Вы должны звонить

[[NSMutableArray alloc]init];  

в вашем

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

метод. В противном случае указатель, который вы получаете от делегата, не указывает на экземпляр NSMutableArray

Я бы тогда уточнил у отладчика, что вы не получаете ноль обратно и что вы получаете тот же адрес обратно. Если что-то из этого не соответствует действительности, я подозреваю, что проблема состоит в том, в каком порядке все происходит

...