문제

응용 프로그램 대의원에서 여러 뷰 컨트롤러가 참조 할 배열을 만들었습니다. 그러나 한보기로 배열을 업데이트하려고하면 다른보기에서 비어 있습니다.

보기 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의 인스턴스를 가리키지 않습니다.

그런 다음 디버거가 당신이 뒤로 돌아 가지 않고 동일한 주소를 돌려 받고 있는지 확인합니다. 이 중 하나가 사실이 아니라면 일이 일어나는 순서가 문제라고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top