AppDelegate의 변수 업데이트
-
19-09-2019 - |
문제
응용 프로그램 대의원에서 여러 뷰 컨트롤러가 참조 할 배열을 만들었습니다. 그러나 한보기로 배열을 업데이트하려고하면 다른보기에서 비어 있습니다.
보기 1 : 뷰 1 :보기 1 : : : : : : : : : : : 1 : : : : 1 : : : : : 뷰 1 : : : 1 :보기 1 :보기 1 :보기 1 :보기 1 :보기 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의 인스턴스를 가리키지 않습니다.
그런 다음 디버거가 당신이 뒤로 돌아 가지 않고 동일한 주소를 돌려 받고 있는지 확인합니다. 이 중 하나가 사실이 아니라면 일이 일어나는 순서가 문제라고 생각합니다.
제휴하지 않습니다 StackOverflow