문제가있는 일부 베타 테스터의 이상한 충돌이 발생합니다. 심볼릭 충돌 보고서는 스택 호출에 따라 컨트롤러를 싱글 톤으로 단순 할당 할 때 충돌이 발생하지만, 스택 추적에 따르면 코드가
마이그레이션 후 이상한 핵심 데이터가 _Unwind_SjLj_Resume과 충돌 함init
인데 실제로 충돌이 발생한 곳이 아닌 것으로 나타났습니다. 관련 코드는 다음과 같습니다.
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];
}
}
하는 데 도움하려면 : 나는 그것을
하고 관련 코드를 재현하는 방법을 발견 한 후 다음 업데이트 2
는 충돌의 호출 스택입니다 내가 그것을 재현하기 위해 무엇을했는지 설명하면, 나는 데이터 구조를 조금 설명해야만한다. 나는
Mix
과 Audio
항목이 있습니다. 믹스에는 많은 오디오가 있고 오디오는 많은 믹스에 속합니다. 이것은 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를 바라고 이 ... 여기에 대한 답변 뭔가 ... 아무것도에 의해 구동되므로 영업 이익은 자신의 문제를 해결할 수있는 동안 나는 그에게이 :
Audio 개체에 LOCAL_MIX_AUDIO_AUDIO_KEY가 정의되어 있습니까? -1은 NSNotFound이므로 시스템에서 키가 존재하지 않는다고 판단하여 어쨌든 찾으려고합니다. 어쩌면 무언가가 제대로 마이그레이션되지 않을 수 있습니다. – ughoavgfhw
예, 그 정의 ... 방금 알아 낸 질문을 업데이트 중입니다 – coneybeare