2012-06-02 3 views
1

View Conroller를 밀고 나면 세그먼트 컨트롤러를 통해 팝업하여 원래 상태로 되돌립니다. 몇 가지 값이 변경됩니다. 하나는 거리 값 (float)이고 다른 하나는 이진 데이터로 저장되는 미리보기 이미지입니다.ViewController를 푸시하고 팝핑하면 코어 데이터 객체가 값을 잃게됩니다

다른보기 컨트롤러를 푸시하기 전에 코어 데이터가 본질적으로이 배열 (현재 배열 임)을 알리는 방법이 있습니까? 어쩌면 그것을 tmpArray에 복사 한 다음 viewDidAppear에 해당 tmpArray를 다시 복사하십시오. 정말 해킹 된 것 같지만이 기능을 작동시켜야합니다. 그래서 여기

들으

편집 # 1

는 일이 잘못 곳 주변에 일부 코드입니다. 그것의 원인이되는 getAllLocationsWithFinished 것 같아 그래서 self.tmpLocations는 변경 :

//works 
    NSLog(@"#1 locations right before call: %@",[self.locations objectAtIndex:2]); 
    self.tmpLocations=[[NSArray alloc] initWithArray:[self.locations copy]]; 
    //works 
    NSLog(@"#2 locations right before call: %@",[self.tmpLocations objectAtIndex:2]); 

    [[ModelManager sharedModelManager] getAllLocationsWithFinished:^(NSArray* map_locations) 
    { 
    // data is off 
    NSLog(@"#3 locations right before call: %@",[self.tmpLocations objectAtIndex:2]); 
+0

메인 스레드에서'getAllLocationsWithFinished' 콜백 메소드가 호출되고 있습니까? 또한'tmpLocations' 속성을 어떻게 선언합니까? 강한? 블록을 실행하기 전에, 그리고 당신의 위치 배열을 가진 프로퍼티를 할당 한 후에 다음을 시도하십시오 :'__block NSArray * testArray = self.tmpLocations; 그런 다음 NSLog는 블록 안의'* testArray'를 NSLog합니다. – Rog

+0

tmpLocations의 선언 강도가 높습니다. 백그라운드 스레드에서 getAllLocationsWithFinished가 실행됩니다. NSLog testArray 때 distance 및 defaultImageData 모두 nil 있습니다. 다른 값은 백그라운드 작업을 위해 GCD를 사용하지 않고 – timpone

답변

0

timpone,

는 뷰 컨트롤러에서 이러한 항목을 작성하는 경우, 당신은 그들이 저장하여 그대로 남아 보장 할 수 있습니다 그들. Core Data가 당신의 범인이라면 나는 놀랄 것이다. 네비게이션 컨트롤러는 코어 데이터에 대한 직교 기술입니다. 그들은 서로 독립적입니다.

푸시 된보기 컨트롤러가 표시되어있는 동안 메모리 경고가 발생하지 않았는지 반드시 확인하십시오. BLOB가 포함될 때 탐색 컨트롤러와 함께 자주 발생합니다. 코드가 변경되는 값의 원인 일 수 있습니다.

GCD를 사용하여 -getAllLocationsWithFinished:에 다시 작업을 수행하는 경우 배경 MOC에서 저장 알림을받지 못할 가능성이 큽니다. 스레드를 잡아서 주 스레드의 개체를 백그라운드와 동기화되도록 유지해야합니다.

Andrew

+0

으로 올바르게 설정됩니다. 객체를 로컬에 저장하지 않습니다. 핵심 데이터 문제는 아니라고 생각합니다. 어떤 이유로지도 컨트롤러가 문제를 일으키고 있습니다. 다른 클래스에서 값을 조작 할 수 없어야합니다. Core Data가 공통된 부분이기 때문에 Core Data를 의심하는 이유 중 하나입니다. SQL 디버깅을 사용하도록 설정했지만 정보를 제공하지 않았습니다. – timpone

+0

timpone, 문제는 분명히'-getAllLocationsWithFinished :'내에 있습니다. 이것이 로깅을 분단하고 정복하기 위해 필요한 부분입니다. 앤드류 – adonoho

+0

그래서, 나는 그 블록 내에서 변화하고 있다는 것에 동의합니다 - 그것은 딜레마입니다; 누가 이것을 (디버깅 메커니즘으로) 변경하고 있는지 알리기 위해 이것을 알리는 방법이 있습니까? 죄송합니다. 이러한 iOS 유형 문제를 디버깅하는 데 약간 새로운 기능이 있습니다. – timpone

관련 문제