2011-01-07 4 views
6

문제가있는 일부 베타 테스터의 이상한 충돌이 발생합니다. 심볼릭 충돌 보고서는 스택 호출에 따라 컨트롤러를 싱글 톤으로 단순 할당 할 때 충돌이 발생하지만, 스택 추적에 따르면 코드가 init인데 실제로 충돌이 발생한 곳이 아닌 것으로 나타났습니다. 관련 코드는 다음과 같습니다. 마이그레이션 후 이상한 핵심 데이터가 _Unwind_SjLj_Resume과 충돌 함

1534| + (UA[REDACTED]PlayerController*)sharedInstance 
1535| { 
1536|  @synchronized(self) 
1537|  { 
1538|   if (sharedInstance == nil) 
1539|  sharedInstance = [[UA[REDACTED]PlayerController alloc] init]; 
1540|  } 
1541|  return sharedInstance; 
1542| } 

이것은 이전에 충돌하지 않았으며 코드는 최근에 변경되지 않았습니다.

Thread 5: 
0 libSystem.B.dylib    0x33bd52d4 __kill + 8 
1 libSystem.B.dylib    0x33bd52c4 kill + 4 
2 libSystem.B.dylib    0x33bd52b6 raise + 10 
3 libSystem.B.dylib    0x33be9d26 __abort + 62 
4 libSystem.B.dylib    0x33be9d7e abort + 62 
5 libSystem.B.dylib    0x33bd7980 __assert_rtn + 152 
6 libgcc_s.1.dylib    0x32acab4e _Unwind_SjLj_Resume + 26 
7 [REDACTED]      0x00060b64 +[UA[REDACTED]PlayerController sharedInstance] (UA[REDACTED]PlayerController.m:1540) 
8 [REDACTED]      0x00063e6c -[UA[REDACTED]PlayerViewController setupControlViews] (UA[REDACTED]PlayerViewController.m:224) 
9 [REDACTED]      0x00062ce0 -[UA[REDACTED]PlayerViewController viewDidLoad] (UA[REDACTED]PlayerViewController.m:268) 
10 UIKit       0x320a0270 -[UIViewController view] + 104 
… 

어떤 아이디어이 비밀 충돌이 무엇인지에 관해서는 어디 그것에서 오는 될 수 있습니다 여기에 제기 스택 추적은?





UPDATE 1
핵심 데이터 및 마이그레이션과 관련이 나타납니다. 나는 그것을 복제 할 수 있었지만, 근본 원인은 여전히 ​​알려져 있지 않다. 이 버전의 일부 자동 마이그레이션이 있고 일부 NSManagedObjects 읽을 수있는 동안 다른 특히 NSManagedObjects 관계에서이 예외가 throw됩니다 나타납니다. PlayerController과 전혀 관련이 없을 수 있습니다. 어떤 핵심 데이터 전문가라도 통찰력이 있습니까?

if (resultArray && [resultArray count]) { 
    for (MixAudio *ma in resultArray) { 
     Audio *audio = [ma valueForKey:LOCAL_MIX_AUDIO_AUDIO_KEY]; 
     if (audio) { 
      [returnArray addObject:audio]; 
    } 
} 

하는 데 도움하려면 : 나는 그것을 alt text
하고 관련 코드를 재현하는 방법을 발견 한 후 다음 업데이트 2




는 충돌의 호출 스택입니다 내가 그것을 재현하기 위해 무엇을했는지 설명하면, 나는 데이터 구조를 조금 설명해야만한다. 나는 MixAudio 항목이 있습니다. 믹스에는 많은 오디오가 있고 오디오는 많은 믹스에 속합니다. 이것은 MixAudio 객체에서 오디오를 얻기위한 간단한 관계 호출입니다. 자, 여기가 단지 이후에 충돌했습니다 새로운 버전으로 데이터베이스를 복구합니다.

내 설정의 데이터베이스 백업은 데이터베이스를 압축하여 데이터를 저장 한 다음 복원시 압축을 푸는 것을 의미합니다. 이 충돌은 복원 프로세스 후에 만 ​​발생합니다. 더 복잡한 작업을 수행하기 위해 맵핑 모델에는 3 개의 데이터베이스 버전이 있습니다. 이 프로세스가 버전 관리 전에 나에게 도움이 되었기 때문에 내 버전에서이 오류가 발생하고 있다고 생각합니다.

다른 모든 데이터는 양호하며 액세스 할 수도 있고 저장할 수도 있습니다. 여하튼,이 단일 가져 오기가 문제를 일으키는 것입니다. 영구 저장소 또는 관리 객체 모델을 설정할 때 오류 또는 경고가 없습니다. 또한 새로운 Mix 객체를 생성하고 액세스 할 수 있으며, 복원 이전에 DB에 있었던 오래된 페치 만 실패합니다.

나는 오류 콘솔 인쇄 잡을 수없는 경우 나 루트 사고 원인을 조사 할 수있는 충돌 라인 주위에 try/catch 퍼팅

Assertion failed: (_Unwind_SjLj_Resume() can't return), function _Unwind_SjLj_Resume, file /SourceCache/libunwind/libunwind-24.1/src/Unwind-sjlj.c, line 326. 

을 :

Error: NSRangeException: *** -[NSMutableArray objectAtIndex:]: index 4294967295 beyond bounds [0 .. 16] 

를하지만이 있습니다 (적어도 나에게는) 단순한 valueForKey 호출에 대해서는 의미가 없다. 4294967295 = 2^32-1 이는 인덱스 var가 아마도 도움이되면 -1로 설정되었음을 의미합니다. 나는 여기에서 길을 잃는다.





는 [SOLVED] UPDATE 3
내가이 버전에있는 옳다고 : 나는 Zarra's book에서 버전 섹션을 다시 읽고 주요 DOH 순간이 있었다. 내가 3 개의 데이터베이스 버전으로 앱을 가지고있는 것은 이번이 처음이다. 내 애플 리케이션에서 매핑 모델을 사용하고 있으며 순진하게 핵심 데이터가 한 모델을 사용하여 1-2에서 매핑 한 다음 2-3을 사용하여 매핑 할 수 있다고 가정했습니다. 나는 1-3 매핑 모델을 가지고 있지 않다는 것을 깨달았을 때 말 그대로 머리를 때렸다. 그것을 테스트하기 위해, 나는 하나를 빨리 추가했고 모든 것은 버터처럼 매끄럽습니다. 이제 나는이 DB의 더 많은 버전을 사용하면서 쉽게 돌아가서 그의 Progressive Data Migration 샘플을 사용하여 내 삶을 편하게 만들어야합니다. 내가 Zarra를 바라고

이 ... 여기에 대한 답변 뭔가 ... 아무것도에 의해 구동되므로 영업 이익은 자신의 문제를 해결할 수있는 동안 나는 그에게이 :

+1

Audio 개체에 LOCAL_MIX_AUDIO_AUDIO_KEY가 정의되어 있습니까? -1은 NSNotFound이므로 시스템에서 키가 존재하지 않는다고 판단하여 어쨌든 찾으려고합니다. 어쩌면 무언가가 제대로 마이그레이션되지 않을 수 있습니다. – ughoavgfhw

+0

예, 그 정의 ... 방금 알아 낸 질문을 업데이트 중입니다 – coneybeare

답변

2

에 대한 포인트를 줄 수있는, 분명이 도움이됩니다 마이그레이션에 대한 이해.

데이터 모델의 두 번째 버전을 만들 때 버전 1에서 버전 2로 매핑 모델이 필요합니다.

세 번째 모델을 만들 때 1에서 2까지의 매핑 모델 이 필요합니다.

당신은 다음과 같은 모델이 필요 네 번째 모델을 추가 할 때 :

  • 1-2
  • 1-3
  • 1-4
  • 2-3
  • 2-4

그리고 거기에서 더 많은 진전을 이룹니다.

+0

친애하는 Markus 님, http://stackoverflow.com/questions/18859083/core-data-strange-crash-with-o3-optimization - 레벨? – user170317