Обновление переменной в AppDelegate
-
19-09-2019 - |
Вопрос
В делегате приложения я создал массив для контроллеров с несколькими представлениями для ссылки. Однако, когда я пытаюсь обновить массив в одном представлении, он появляется пустым в другом.
Просмотр 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 = [[NSMutableArray alloc] init];И посмотрите, называется ли это чаще, тогда вы подумали.
Другие советы
Я подозреваю, что вы не инициализировали массив Mydata в делегате. Вы должны звонить
[[NSMutableArray alloc]init];
в твоей
- (void)applicationDidFinishLaunching:(UIApplication *)application {
метод В противном случае указатель, который вы возвращаетесь от делегата, не указывает на экземпляр NSMutableArray
Затем я бы проверил с отладчиком, что вы не вернете NIL и что вы получаете один и тот же адрес обратно. Если кто -то из них не правда, я подозреваю, что порядок, в котором происходит все, является проблемой