2011-09-30 2 views
4

내 앱이 내 기기에서 충돌하지만 시뮬레이터에서는 충돌을 일으키는 내 코드에 어떤 문제가 있는지 알려줄 수 있기를 바랍니다. 그것은 매우 간단한 응용 프로그램입니다, 난 그냥 로컬 파일을 UIWebView에 표시했습니다. 여기에 내가 여기에 뭔가 느낌 때문에 내하는 .m 나는 단지이 코드를 게시하도록하겠습니다iPhone 앱이 기기에서는 충돌하지만 시뮬레이터에서는 충돌하지 않습니다. UIWebView로 로컬 파일에 액세스하는 중, 가능한 [NSBundle mainBundle] 문제가 있습니까?

NSString *path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html" inDirectory:@"localHTML/mobile"]; 
NSURL *url = [NSURL fileURLWithPath:path]; 
NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
[webView loadRequest:request]; 

을에 사용하고있는 문제의 원인이되는,하지만 난 알고 무엇을, 당신이 볼 필요가 있다면 알려 주시기 무엇인가 다른 것.

다음은 오류 로그입니다. 이 중 일부는 도움이되지 않지만, 무엇을 찾아야할지 모르기 때문에 전체를 게시 할 것이라고 생각했습니다.

Incident Identifier: 9598C96E-EA38-4C54-B39F-BBD245648E48 
CrashReporter Key: cb7605a41daea519012d6fd4f52c4b19fb584743 
Hardware Model:  iPhone3,1 
Process:   Cannon Mobile [5129] 
Path:   /var/mobile/Applications/E5760D01-689A-41A3-A6CA-45E007B7C27A/Cannon Mobile.app/Cannon Mobile 
Identifier:  Cannon Mobile 
Version:   ??? (???) 
Code Type:  ARM (Native) 
Parent Process: launchd [1] 

Date/Time:  2011-09-30 19:26:57.951 -0400 
OS Version:  iPhone OS 4.3.3 (8J2) 
Report Version: 104 

Exception Type: EXC_CRASH (SIGABRT) 
Exception Codes: 0x00000000, 0x00000000 
Crashed Thread: 0 

Thread 0 name: Dispatch queue: com.apple.main-thread 
Thread 0 Crashed: 
0 libsystem_kernel.dylib   0x3558fa1c __pthread_kill + 8 
1 libsystem_c.dylib    0x356663b4 pthread_kill + 52 
2 libsystem_c.dylib    0x3565ebf8 abort + 72 
3 libstdc++.6.dylib    0x35628a64 __gnu_cxx::__verbose_terminate_handler() + 376 
4 libobjc.A.dylib     0x3449d06c _objc_terminate + 104 
5 libstdc++.6.dylib    0x35626e36 __cxxabiv1::__terminate(void (*)()) + 46 
6 libstdc++.6.dylib    0x35626e8a std::terminate() + 10 
7 libstdc++.6.dylib    0x35626f5a __cxa_throw + 78 
8 libobjc.A.dylib     0x3449bc84 objc_exception_throw + 64 
9 CoreFoundation     0x3098048a +[NSException raise:format:arguments:] + 62 
10 CoreFoundation     0x309804c4 +[NSException raise:format:] + 28 
11 Foundation      0x341dd188 -[NSURL(NSURL) initFileURLWithPath:] + 64 
12 Foundation      0x341dd128 +[NSURL(NSURL) fileURLWithPath:] + 24 
13 Cannon Mobile     0x000033da -[Cannon_MobileViewController refresh:] (Cannon_MobileViewController.m:48) 
14 Cannon Mobile     0x000034ec -[Cannon_MobileViewController viewDidLoad] (Cannon_MobileViewController.m:62) 
15 UIKit       0x30a18f08 -[UIViewController view] + 104 
16 UIKit       0x30a172ae -[UIWindow addRootViewControllerViewIfPossible] + 26 
17 UIKit       0x30b42538 -[UIWindow setRootViewController:] + 160 
18 Cannon Mobile     0x00002fb6 -[Cannon_MobileAppDelegate application:didFinishLaunchingWithOptions:] (Cannon_MobileAppDelegate.m:22) 
19 UIKit       0x30a1781a -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 766 
20 UIKit       0x30a11b5e -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 266 
21 UIKit       0x309e67d0 -[UIApplication handleEvent:withNewEvent:] + 1108 
22 UIKit       0x309e620e -[UIApplication sendEvent:] + 38 
23 UIKit       0x309e5c4c _UIApplicationHandleEvent + 5084 
24 GraphicsServices    0x30269e70 PurpleEventCallback + 660 
25 CoreFoundation     0x30957a90 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 20 
26 CoreFoundation     0x30959838 __CFRunLoopDoSource1 + 160 
27 CoreFoundation     0x3095a606 __CFRunLoopRun + 514 
28 CoreFoundation     0x308eaebc CFRunLoopRunSpecific + 224 
29 CoreFoundation     0x308eadc4 CFRunLoopRunInMode + 52 
30 UIKit       0x30a10d42 -[UIApplication _run] + 366 
31 UIKit       0x30a0e800 UIApplicationMain + 664 
32 Cannon Mobile     0x00002f20 main (main.m:14) 
33 Cannon Mobile     0x00002ec8 start + 32 

Thread 1: 
0 libsystem_kernel.dylib   0x355903ec __workq_kernreturn + 8 
1 libsystem_c.dylib    0x356676d8 _pthread_wqthread + 592 
2 libsystem_c.dylib    0x35667bbc start_wqthread + 0 

Thread 2 name: Dispatch queue: com.apple.libdispatch-manager 
Thread 2: 
0 libsystem_kernel.dylib   0x35590fbc kevent + 24 
1 libdispatch.dylib    0x35261032 _dispatch_mgr_invoke + 706 
2 libdispatch.dylib    0x3526203a _dispatch_queue_invoke + 86 
3 libdispatch.dylib    0x352615ea _dispatch_worker_thread2 + 186 
4 libsystem_c.dylib    0x3566758a _pthread_wqthread + 258 
5 libsystem_c.dylib    0x35667bbc start_wqthread + 0 

Thread 3 name: WebThread 
Thread 3: 
0 libsystem_kernel.dylib   0x3558dc5c semaphore_wait_signal_trap + 8 
1 libsystem_kernel.dylib   0x3558df52 semaphore_wait_signal + 2 
2 libsystem_c.dylib    0x35664734 pthread_mutex_lock + 256 
3 WebCore       0x35f533ee _ZL17_WebTryThreadLockb + 150 
4 WebCore       0x35f5332e _ZL14WebRunLoopLockP19__CFRunLoopObservermPv + 14 
5 CoreFoundation     0x30957a2e __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 10 
6 CoreFoundation     0x3095945e __CFRunLoopDoObservers + 406 
7 CoreFoundation     0x3095a760 __CFRunLoopRun + 860 
8 CoreFoundation     0x308eaebc CFRunLoopRunSpecific + 224 
9 CoreFoundation     0x308eadc4 CFRunLoopRunInMode + 52 
10 WebCore       0x35f5327e _ZL12RunWebThreadPv + 382 
11 libsystem_c.dylib    0x3566630a _pthread_start + 242 
12 libsystem_c.dylib    0x35667bb4 thread_start + 0 

Thread 0 crashed with ARM Thread State: 
    r0: 0x00000000 r1: 0x00000000  r2: 0x00000001  r3: 0x00000000 
    r4: 0x3f86348c r5: 0x00000006  r6: 0x1d59051c  r7: 0x2fe10f90 
    r8: 0x3ed19bf8 r9: 0x00000065  r10: 0x3180e2f0  r11: 0x3ed0c964 
    ip: 0x00000148 sp: 0x2fe10f84  lr: 0x3619b3bb  pc: 0x360c4a1c 
    cpsr: 0x00000010 

도움을 주셔서 대단히 감사합니다.

+0

오류 로그에 예외가 발생했음을 보여줍니다. 예외는 무엇입니까? –

+0

디버거에서이 단계를 밟았습니까? 'path'가 첫 번째 줄 다음에 올바르게 설정 되었습니까? 아니면 nil입니까? –

+0

디버거가 와 함께 돌아 오니 경로에있는 내용을 확인하십시오. @ Kevin은 장치 파일 시스템이 대소 문자를 구분한다고 언급했지만 모든 것이 좋은 것으로 보입니다. 그것은 다른 것일 수 있습니까? – davis

답변

2

Xcode에서 생성되는 응용 프로그램 번들을 확인하십시오. localHTML/mobile 디렉토리와 예상 한 모든 파일이 포함되어 있습니까?

(appname을 마우스 오른쪽 버튼으로 클릭하십시오.Xcode 탐색기 패널의 제품 섹션에서 'Finder에서 공개'를 선택한 다음 Finder에서 앱 번들을 마우스 오른쪽 버튼으로 클릭하고 '패키지 내용 표시'를 선택하십시오.

+0

감사합니다. 나는 파일을 빌드 타겟에 두지 않는다. – davis

1

글쎄, 왜 이것이 충돌하는지 정확히 모르겠습니다. 그것의 모습에서 당신은 근본적으로 잘못된 것을하지 않습니다. 파일 경로 나 파일과 관련이 있다고 생각합니다. 그것을 죽이는 줄은 [NSURL fileURLWithPath:path]이고 pathForResource: 대신 - (NSURL *)URLForResource:(NSString *)name withExtension:(NSString *)ext subdirectory:(NSString *)subpath을 사용하여 해당 줄을 건너 뛸 수 있습니다. 그게 당신의 문제를 해결할 지 모르겠지만, 그럴만 한 가치가 있습니다.

편집 : 오, 시뮬레이터와 장치의 차이점은 osx/시뮬레이터에는없는 반면 장치의 파일 시스템은 대소 문자를 구분한다는 것입니다. 파일 이름이나 파일 경로에 대소 문자가있을 수 있습니까?


문제가있는 곳을 확인하려면 NSLog를 사용해보십시오.

NSString *path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html" inDirectory:@"localHTML/mobile"]; 
NSLog(@"Path is %@",path); 
NSURL *url = [NSURL fileURLWithPath:path]; 
NSLog(@"URL is %@",url); 
NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
[webView loadRequest:request]; 

콘솔에서 볼 경우, 당신은 당신의 pathForResource 전화에서 뭔가를 잘못 지정하고 "경로가 null".

A는 생각 : 당신이 당신의 Xcode 프로젝트에 파일을 추가했지만 빌드 대상에서 그들을 포함되지했다면

는, 그들은 응용 프로그램 번들에 추가되지 않습니다.

로컬 HTML 및 모바일이 실제 폴더가 아닌 Xcode에서 "그룹"인 경우 앱을 컴파일 할 때 무시됩니다. Xcode 그룹은 컴파일 된 앱과 관련하여 NOTHING을 의미합니다 (앱 번들에서 폴더를 만드는 방법에 대한 폴더 참조를 살펴보십시오).

+0

대/소문자 구분을 확인하는 +1 - 시뮬레이터는 대/소문자를 구분하지 않습니다. –

1

예외를 게시하지 않았으므로 nil에서 +fileURLWithPath:으로 넘어갔습니다. 왜 시뮬레이터가 아닌 기기에 nil을 얻으시겠습니까? 간단한 대답 : 대소 문자 구분. 장치의 파일 시스템은 대소 문자를 구분하지만 Mac OS X의 기본 HFS + 파일 시스템은 그렇지 않습니다. localHTML/mobile/index.html을 요청하고 있지만 그 중 하나의 문자가 대소 문자가 틀린 경우 -pathForResource:ofType:inDirectory:은 결국 기기에서 nil을 반환하게됩니다. nil인지 테스트하지 않았으므로 +fileURLWithPath:에 직접 전달하면 결과적으로 예외가 발생합니다.