2011-06-28 46 views
2

我使用iOS SDK 4.3在XCode(4.0)中創建了一個新的基於View的iPhone應用程序。然後我將ViewController的名稱從MyProjectNameViewController更改爲LoginViewController。我還用LoginViewController代替了我能找到的MyProjectNameViewController的每個實例,並且我已經仔細檢查了界面構建器中的所有鏈接。更改ViewController的名稱會導致應用程序崩潰?

然而,當我嘗試運行應用程序,它崩潰了:

2011-06-29 10:21:36.927 Monitoring[12580:207] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<LoginViewController 0x4b26bf0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key password.' 
*** Call stack at first throw: 
(
    0 CoreFoundation      0x00dc05a9 __exceptionPreprocess + 185 
    1 libobjc.A.dylib      0x00f14313 objc_exception_throw + 44 
    2 CoreFoundation      0x00dc04e1 -[NSException raise] + 17 
    3 Foundation       0x00792677 _NSSetUsingKeyValueSetter + 135 
    4 Foundation       0x007925e5 -[NSObject(NSKeyValueCoding) setValue:forKey:] + 285 
    5 UIKit        0x0020e30c -[UIRuntimeOutletConnection connect] + 112 
    6 CoreFoundation      0x00d368cf -[NSArray makeObjectsPerformSelector:] + 239 
    7 UIKit        0x0020cd23 -[UINib instantiateWithOwner:options:] + 1041 
    8 UIKit        0x0020eab7 -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:] + 168 
    9 UIKit        0x000c4628 -[UIViewController _loadViewFromNibNamed:bundle:] + 70 
    10 UIKit        0x000c2134 -[UIViewController loadView] + 120 
    11 UIKit        0x000c200e -[UIViewController view] + 56 
    12 UIKit        0x00035d42 -[UIWindow addRootViewControllerViewIfPossible] + 51 
    13 MyProjectName      0x000022c7 -[MyProjectNameAppDelegate application:didFinishLaunchingWithOptions:] + 135 
    14 UIKit        0x00012c89 -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1163 
    15 UIKit        0x00014d88 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 439 
    16 UIKit        0x0001f617 -[UIApplication handleEvent:withNewEvent:] + 1533 
    17 UIKit        0x00017abf -[UIApplication sendEvent:] + 71 
    18 UIKit        0x0001cf2e _UIApplicationHandleEvent + 7576 
    19 GraphicsServices     0x00ff9992 PurpleEventCallback + 1550 
    20 CoreFoundation      0x00da1944 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52 
    21 CoreFoundation      0x00d01cf7 __CFRunLoopDoSource1 + 215 
    22 CoreFoundation      0x00cfef83 __CFRunLoopRun + 979 
    23 CoreFoundation      0x00cfe840 CFRunLoopRunSpecific + 208 
    24 CoreFoundation      0x00cfe761 CFRunLoopRunInMode + 97 
    25 UIKit        0x000147d2 -[UIApplication _run] + 623 
    26 UIKit        0x00020c93 UIApplicationMain + 1160 
    27 MyProjectName      0x00002209 main + 121 
    28 MyProjectName      0x00002185 start + 53 

什麼我需要做的,解決這一問題?

+0

_I我也替換了每一個我能找到的實例_...我想你錯過了一個。 – PengOne

+0

說真的,我一遍又一遍地檢查了每一個類,並查看了xibs的源代碼,並且沒有一箇舊的控制器名稱的實例。 – DanielGibbs

+0

您是通過手動還是使用重構工具來完成此操作? – Abizern

回答

2

原來我需要從iPhone模擬器中刪除應用程序並重新加載它。它不應該自動執行此操作嗎?

+0

它應該,但它不。你應該向Apple提出一個錯誤。 – Abizern

3

您是否還重命名了您的nibs/xibs中的類?

錯誤消息告訴您某事想要通過KVC訪問password,並且其所調用的對象(LoginViewController)不提供對password的KVC兼容訪問。你有沒有撥弄password getters/setters?

+0

是的,我確實重命名了xib中的類,並且我查看了xib中的源代碼,並且所有內容都應該如此。我實際上並沒有任何叫做'password'的東西,它並沒有在我的任何代碼中被引用。 – DanielGibbs

+0

有些東西正在尋找密碼...可能綁定在筆尖上? – Eiko

+0

沒有,檢查了筆尖的源代碼,沒有任何東西。 – DanielGibbs

1

我建議你做Build/Clean All Targets,刪除項目中的/ Build /目錄,然後重新運行項目。如果它仍然崩潰,那麼你肯定錯過了一些東西。

+0

好吧,這是bizzare,但我不能爲我的生活找到/ Build /目錄。它通常與項目對應的目錄在同一個目錄中? – DanielGibbs

+0

找到了。它是正常的在用戶/我/圖書館/開發人員/ Xcode/DerivedData/MyProjectName-bkzvxpbmqezjiuekoyjrwutshmkm /生成/產品/調試-iphonesimulator/MyProjectName.app? – DanielGibbs

+0

是的,這很正常。而找到它的一個更簡單的方法是使用Xcode的組織者,它可以顯示你所有的項目衍生產品 - 你可以從那裏刪除它們。 – Abizern

0

您的渠道不正常。筆尖正在尋找一些將「密碼」綁定到的東西,但控制器中沒有相應的屬性。

+0

我沒有任何名爲'password'的插座,也沒有在我的代碼中引用任何地方。 – DanielGibbs

-1

由剛剛獲得這樣的: 1)選擇要更改名稱:MyProjectNameViewController 2)編輯 - >重構,填寫到 「LoginViewController」 就是這樣。但要注意,如果在storyboardID之前將其設置爲視圖控制器,可能會手動更改它。