2011-11-22 2 views
19

나는 간단한 애플리케이션을 작성하기 위해 자습서를 사용하고 있습니다. 오늘 업무용 컴퓨터에 앱을 복사했습니다. 지난 밤에 내 노트북에서 완벽하게 작동했지만 오늘은이 오류가 발생합니다. 나는 거의 모든 코드를 다 써 버리려고했지만, 심지어 didFinishLaunchingWithOptions 함수의 모든 것을 삭제했지만 여전히이 오류가 발생합니다. 어디서나 선언 된 navBar도 없습니다! 문제가되는 코드 외부에 어떤 종류의 프로젝트 또는 파일 설정이 있다고 가정합니까?캐치되지 않은 예외로 인해 앱이 종료 됨 'NSUnknownKeyException'

2011-11-22 14:39:32.294 LetsEat[15320:b603] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<LetsEatAppDelegate 0x5a824a0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key navBar.' 
*** Call stack at first throw: 
(
    0 CoreFoundation      0x00fa45a9 __exceptionPreprocess + 185 
    1 libobjc.A.dylib      0x010f8313 objc_exception_throw + 44 
    2 CoreFoundation      0x00fa44e1 -[NSException raise] + 17 
    3 Foundation       0x0079f677 _NSSetUsingKeyValueSetter + 135 
    4 Foundation       0x0079f5e5 -[NSObject(NSKeyValueCoding) setValue:forKey:] + 285 
    5 UIKit        0x0021b30c -[UIRuntimeOutletConnection connect] + 112 
    6 CoreFoundation      0x00f1a8cf -[NSArray makeObjectsPerformSelector:] + 239 
    7 UIKit        0x00219d23 -[UINib instantiateWithOwner:options:] + 1041 
    8 UIKit        0x0021bab7 -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:] + 168 
    9 UIKit        0x0002117a -[UIApplication _loadMainNibFile] + 172 
    10 UIKit        0x00021cf4 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 291 
    11 UIKit        0x0002c617 -[UIApplication handleEvent:withNewEvent:] + 1533 
    12 UIKit        0x00024abf -[UIApplication sendEvent:] + 71 
    13 UIKit        0x00029f2e _UIApplicationHandleEvent + 7576 
    14 GraphicsServices     0x011dd992 PurpleEventCallback + 1550 
    15 CoreFoundation      0x00f85944 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52 
    16 CoreFoundation      0x00ee5cf7 __CFRunLoopDoSource1 + 215 
    17 CoreFoundation      0x00ee2f83 __CFRunLoopRun + 979 
    18 CoreFoundation      0x00ee2840 CFRunLoopRunSpecific + 208 
    19 CoreFoundation      0x00ee2761 CFRunLoopRunInMode + 97 
    20 UIKit        0x000217d2 -[UIApplication _run] + 623 
    21 UIKit        0x0002dc93 UIApplicationMain + 1160 
    22 LetsEat        0x00001c99 main + 121 
    23 LetsEat        0x00001c15 start + 53 
) 
terminate called throwing an exceptionCurrent language: auto; currently objective-c 
(gdb) 

EDIT : 이것은 내 delegate.m 파일의 맨 위에 있습니다. 보시다시피이 모든 것이 상용구입니다.

#import "LetsEatAppDelegate.h" 
//#import "ItemsViewController.h" 

@implementation LetsEatAppDelegate 

@synthesize window = _window; 
@synthesize managedObjectContext = __managedObjectContext; 
@synthesize managedObjectModel = __managedObjectModel; 
@synthesize persistentStoreCoordinator = __persistentStoreCoordinator; 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // Override point for customization after application launch. 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

프로젝트의 다른 모든 파일을 제거했지만 여전히이 오류가 발생합니다. 지금의 약자로서

편집 2

것은, 난 단지 내 작업 기계에서이 오류가 발생합니다. 정확하게 동일한 파일이 내 집 랩톱에서 완벽하게 실행됩니다. 동일한 버전의 XCode (4.2.1)

+0

'LetsEat'에 대한 코드를 표시하십시오. – zaph

답변

15

고정에 클래스와 파일 소유자가있을 수, 앱 설정 방식 확실하지 않다 - iOS Simulator> 콘텐츠 및 설정 초기화

8

문제는 nib 파일에 있습니다. LetsEatAppDelegate에서 navBar 로의 이전 연결이 있습니다.

나는 당신의 펜촉 파일 중 하나에 LetsEatAppDelegate 객체가있을 수 있습니다, 또는 설정 LetsEatAppDelegate

4 Foundation       0x0079f5e5 -[NSObject(NSKeyValueCoding) setValue:forKey:] + 285 
5 UIKit        0x0021b30c -[UIRuntimeOutletConnection connect] + 112 
6 CoreFoundation      0x00f1a8cf -[NSArray makeObjectsPerformSelector:] + 239 
7 UIKit        0x00219d23 -[UINib instantiateWithOwner:options:] + 1041 
8 UIKit        0x0021bab7 -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:] + 168 


2011-11-22 14:39:32.294 LetsEat[15320:b603] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<LetsEatAppDelegate 0x5a824a0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key navBar.' 
*** Call stack at first throw: 
+0

재미있는 점은 기본적으로 아주 새로운 프로젝트 인 Window 기반 응용 프로그램이라는 것입니다. 확실히 Navbar를 만들지 않았고 검색을 수행하여 내 프로젝트에서 Navbar에 대한 언급을 찾을 수 없었습니다. – Jon

+1

인터페이스 빌더에서 관련 xib를 열고 파일 소유자를 마우스 오른쪽 버튼으로 클릭하고 거기에 매달려있는 연결을 확인하십시오. 이것은 때로는 나에게도 일어납니다 ... – Warkst

+0

@Warkst는 그것을 명확히 해 주셔서 감사합니다. @ 존 오래된 연결 = 매달려 연결 –

7

이 문제가있어서 '기본 인터페이스'를 설정했는데 문제가 발생했습니다.

이 설정을 변경하려면 (파일 왼쪽 탐색기에서) 프로젝트를 클릭하십시오. 이제 가운데 영역에 프로젝트 설정의 '요약'이 표시됩니다. 이 영역은 iOS Application Target 또는 지원되는 Device Orientation을 변경할 영역과 동일합니다. 'iPhone/iPod Deployment Info'섹션에서 'Main Interface'드롭 다운을 비워두고 비워 둡니다. 이 문제가 해결되었습니다.

행운을 빈다.

+2

이것은 Ionic/Cordova 앱에서 작업하는 동안 도움이되었습니다. Main Interface의 값을 지우면 즉시 수정되었습니다. 이 오류는 그 문제를 잘 설명하지 못했습니다. – newz2000

+0

나는 이오니아와도 일하고 ​​있었다. 그리고 주된 인터페이스를 설정했다. 2 시간의 시간을 낭비했다. @ newz2000 – marman

+0

Cordova/Ionic2 앱이 나와 같은 사람이다. 나는 전에 이것을 스스로 설정했다. – Rocco

25

콘텐츠 재설정 및 설정이 작동하지 않았습니다. 내가 XIB의 소유자에 함께 IBOutlet에 인터페이스 빌더에서 UIControl 콘센트를 연결했다

:

은 여기 내 늦은 밤 시간의 2 시간을 낭비거야. 어떤 이유로 IBOutlet이 소유자에게서 삭제되었지만 콘센트에 대한 참조가 xib에 매달려 남아있었습니다. (2015 1월 26일) 있다 : 구현에 바르 위해 어떤 출구를 삭제하는 경우,

업데이트는 IB의 각 연결을 풉니 다해야합니다 : 이것은 항상 나에게

"Terminating app due to uncaught exception 'NSUnknownKeyException'" 

수업 배운 오류를 줄 것이다 인터페이스 빌더 또는 펜촉이 이런 식으로 행동하는 이유는 무엇입니까?언더

  1. : 당신이 TheBaseClass에 함께 IBOutlet을 가지고 있고, 당신이 TheSubClass에 대한 스토리 보드의 펜촉이나 장면이있는 경우

    ,이 콘센트를 연결하기위한 두 가지 방법 (해킹)이 있습니다 Identity Inspector에서 TheBaseClass에 "Custom Class"식별자의 이름을 지정하고 콘센트에 연결 한 다음 "Custom Class"섹션의 클래스 이름을 TheSubclass로 설정하십시오.

  2. TheSubclass 코드에 IBOutlet을 추가하고이를 ui 요소에 연결하십시오 펜촉에서 TheBaseClass에 IBOutlet 코드를 추가하고 TheSubClass에서 해당 코드를 삭제하십시오

나는이 answer을 발견했을 때 애플이 왜이 매달려있는 참조 문제를 그대로 남겨 둘지에 관해서 막 떨어졌다. 왜냐하면 그것은 버그가 아니기 때문입니다. 그것의 특징.

+0

내가 배운 교훈은 : IB를 사용하지 마십시오. –

+2

에 동의했기 때문에 IB는 성숙되지 않았으며 지금도 그렇지 않습니다. 그러나 확실히 2 년 전보다 수천 배나 더 좋습니다. 그리고 XCode5 IB 기능은 IB 사용을 더 어렵게 만듭니다. 프로그래밍 방식에서만 IB 기반 개발로 옮겨 왔으며 여전히 맹세했습니다. –

+1

이것은 최고의 대답입니다. 나는 이것을 위해 많은 신경 세포를 보냈다. 고마워, 남자 !! –

0

"기본 인터페이스"를 지우면 나에게도 문제가 해결되었습니다. "Main Interface"를 지우고 빌드하기 전에 "Clean"을 수행해야합니다.

+0

하지만이 문제의 원인은 무엇입니까? 그것은 아무 의미가 없습니다. – CommaToast

3

오. @properties 및/또는 IBActions를 제거한 후에도 동일한 문제가 발생하여 미쳐 버렸습니다! 왓크 스트가 돈에 맞았다. 문제보기 컨트롤러로 이동하여 주황색 공을 클릭하고 발견 한 매달린 참조를 선택 취소하십시오. 모두 찾으려면 아래로 스크롤해야 할 수도 있습니다. 이것은 내 문제를 해결했다. 대단히 감사합니다.

0

나는 rootViewController이 방법으로 init이있다

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

도이 문제를

1.In AppDelegate에 방법이 initWithNibName ..... 실제로 nib 파일이 존재하지 않는 충족하므로 예외 던져 ..

할수 있도록 팝업의 ViewController의로드 뷰는 내가 XIB 파일을 삭제하기 때문에

나는 아직, 어쩌면 다음 뷰 컨트롤러를 추측 충돌 nib 파일 .. 초기화 그래서 - (void)로드 뷰 메서드를 추가합니다. 그리고 지금은 괜찮아요 .ps : 시뮬레이터를 리셋했지만 작동하지 않습니다.

희망 도움말.

관련 문제