2011-09-22 3 views
3

그래서 나는 방법이 전화 해요 :무엇입니까 - [NSURL _fastCharacterContents] :?

라인에 NSLog에 바로 충돌
-(id)initWithContentURL:(NSString *)url { 
if (self = [super init]) { 
    NSLog(@"xSheetMusicViewController - %@",url); 
    // Casting an NSString object pointer to a CFStringRef: 
    CFStringRef cfString = (CFStringRef)url;   
    CFURLRef pdfURL = CFBundleCopyResourceURL(CFBundleGetMainBundle(), cfString, NULL, NULL); 
    pdf = CGPDFDocumentCreateWithURL((CFURLRef)pdfURL); 
    } 
    return self; 
} 

가 표시 : 내가 전에 본 적이이 멋진 약간의 오차

CFURLRef pdfURL = CFBundleCopyResourceURL(CFBundleGetMainBundle(), cfString, NULL, NULL); 

. 다음은 오류 로그입니다.

SheetMuse[83550:b603] -[NSURL _fastCharacterContents]: unrecognized selector sent to instance 0x4ec35f0 
2011-09-22 17:36:22.921 SheetMuse[83550:b603] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSURL _fastCharacterContents]: unrecognized selector sent to instance 0x4ec35f0' 
*** Call stack at first throw: 
(
0 CoreFoundation      0x011be5a9 __exceptionPreprocess + 185 
1 libobjc.A.dylib      0x01312313 objc_exception_throw + 44 
2 CoreFoundation      0x011c00bb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187 
3 CoreFoundation      0x0112f966 ___forwarding___ + 966 
4 CoreFoundation      0x0112f522 _CF_forwarding_prep_0 + 50 
5 CoreFoundation      0x010d2857 CFStringGetCharactersPtr + 135 
6 CoreFoundation      0x010d6c93 CFStringGetFileSystemRepresentation + 35 
7 CoreFoundation      0x01110811 _CFFindBundleResources + 289 
8 CoreFoundation      0x0110d961 CFBundleCopyResourceURL + 305 
9 SheetMuse       0x00005b19 -[xSheetMusicViewController initWithContentURL:] + 153 
10 SheetMuse       0x00009724 -[ExamplesViewController tableView:didSelectRowAtIndexPath:] + 708 
11 UIKit        0x00487b68 -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 1140 
12 UIKit        0x0047db05 -[UITableView _userSelectRowAtPendingSelectionIndexPath:] + 219 
13 Foundation       0x00b9779e __NSFireDelayedPerform + 441 
14 CoreFoundation      0x0119f8c3 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 19 
15 CoreFoundation      0x011a0e74 __CFRunLoopDoTimer + 1220 
16 CoreFoundation      0x010fd2c9 __CFRunLoopRun + 1817 
17 CoreFoundation      0x010fc840 CFRunLoopRunSpecific + 208 
18 CoreFoundation      0x010fc761 CFRunLoopRunInMode + 97 
19 GraphicsServices     0x028a31c4 GSEventRunModal + 217 
20 GraphicsServices     0x028a3289 GSEventRun + 115 
21 UIKit        0x0041ec93 UIApplicationMain + 1160 
22 SheetMuse       0x000028a9 main + 121 
23 SheetMuse       0x00002825 start + 53 
) 
terminate called throwing an exceptionsharedlibrary apply-load-rules all 

이 오류는 무엇이며 어떻게 수정합니까?

편집 :이 질문은 해결되었습니다. 대답 해 주신 모든 분들께 감사 드리며, 벽에 머리를 치고 이것을 알아 내려고했습니다. 원한다면 몇 주 안에 릴리스하고 싶은대로 앱에서 언급 할 수 있습니다. 코드에서 가장 큰 버그를 찾아 냈습니다. 다시 한번 감사드립니다!

답변

9

-_fastCharacterContents:NSString의 개인 방법입니다. 오류는 해당 메시지가 NSURL 인스턴스로 전송되었으므로 충돌이 발생했음을 나타냅니다. -initWithContentURL:에 전달되는 url 매개 변수가 NSString이 아닌 NSURL 인 것 같습니다. 방법의 시작 부분에

NSLog(@"url is of type %@", [url class]); 

배치

당신에게 url의 정확한 클래스를 말해야한다. 분명히 방법은 (상대) 경로를 나타내는 문자열을 기대하고 있는지 확인하기 위해

- (void)initWithContentPath:(NSString *)path 

:

나는 당신이 당신의 방법 서명을 변경하는 것이 좋습니다. 코코아 터치에는 인수를 받기 위해  -initWithContentURL:을 선언하는 다른 클래스가 있습니다.

+0

사실, 당신은 완전히 옳았습니다! NSLog가 "NSURL 유형"을 반환했습니다. 정말 고맙습니다! – CodaFi

+0

또한 편집을 확인하고, 내가하기 전에 귀하의 특권을 원합니다. – CodaFi

+0

@Cod 나는 차라리하지 않을 것이다. 상영만으로 충분합니다. :) –

1

대부분의 경우 이러한 종류의 오류는 잘못된 유형의 개체를 호출로 전달하기 때문에 발생합니다.

1

어떻게 initWithContentURL을 (를) 호출 하시겠습니까? NSString을 (부적절하게) NSString으로 전달한 것처럼 보입니다.