1

を持つアプリケーションがありますUIPickerView。それが含まれているビューを開こうとすると、アプリケーションがクラッシュしNSUnknownKeyExceptionます。

ログは次のとおりです。

    2015-08-01 17:43:50.572 Patient Consent Project[1748:47245] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<Patient_Consent_Project.ProcedurePicker 0x7ff381d1dd50> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key picker.'
*** First throw call stack:
(
0   CoreFoundation                      0x000000010de51c65 __exceptionPreprocess + 165
1   libobjc.A.dylib                     0x000000010f9bcbb7 objc_exception_throw + 45
2   CoreFoundation                      0x000000010de518a9 -[NSException raise] + 9
3   Foundation                          0x000000010e26fb53 -[NSObject(NSKeyValueCoding) setValue:forKey:] + 259
4   CoreFoundation                      0x000000010dd99d50 -[NSArray makeObjectsPerformSelector:] + 224
5   UIKit                               0x000000010e9c84eb -[UINib instantiateWithOwner:options:] + 1506
6   UIKit                               0x000000010e8206d8 -[UIViewController _loadViewFromNibNamed:bundle:] + 242
7   UIKit                               0x000000010e820cc8 -[UIViewController loadView] + 109
8   UIKit                               0x000000010e820f39 -[UIViewController loadViewIfRequired] + 75
9   UIKit                               0x000000010e8213ce -[UIViewController view] + 27
10  UIKit                               0x000000010e73c289 -[UIWindow addRootViewControllerViewIfPossible] + 58
11  UIKit                               0x000000010e73c64f -[UIWindow _setHidden:forced:] + 247
12  UIKit                               0x000000010e748de1 -[UIWindow makeKeyAndVisible] + 42
13  UIKit                               0x000000010e6ec417 -[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + 2732
14  UIKit                               0x000000010e6ef19e -[UIApplication _runWithMainScene:transitionContext:completion:] + 1349
15  UIKit                               0x000000010e6ee095 -[UIApplication workspaceDidEndTransaction:] + 179
16  FrontBoardServices                  0x00000001114b95e5 __31-[FBSSerialQueue performAsync:]_block_invoke_2 + 21
17  CoreFoundation                      0x000000010dd8541c __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12
18  CoreFoundation                      0x000000010dd7b165 __CFRunLoopDoBlocks + 341
19  CoreFoundation                      0x000000010dd7af25 __CFRunLoopRun + 2389
20  CoreFoundation                      0x000000010dd7a366 CFRunLoopRunSpecific + 470
21  UIKit                               0x000000010e6edb02 -[UIApplication _run] + 413
22  UIKit                               0x000000010e6f08c0 UIApplicationMain + 1282
23  Patient Consent Project             0x000000010dc3fe97 main + 135
24  libdyld.dylib                       0x00000001100f2145 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb) 

の私の見解のコードは次のUIPickerViewとおりです。

class ProcedurePicker: UIViewController, UIPickerViewDelegate {

var selectedText = "Pick Procedure Here"
var procedures = ["Epidural Steroid Injection", "Selective Nerve Root Injection", "Facet Joint Injection", "Medial Branch Nerve Block", "Sympathetic Nerve Block", "Caudal Epidural Injection", "Intrathecal Opioid Injection", "Epidural Blood Patch", "Radiofrequency Ablation on Medial Branch Nerve", "Spinal Cord Stimulator Trial", "Piriformins Injection", "Tail Bone Injection", "Ganglion Impar Block", "Stellate Ganglion Block", "Discography"]
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int{
  return 1
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    return procedures.count
}

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
    return procedures[row]
}

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)
{
    selectedText = procedures[row]
}

@IBAction func onPressDone(sender: UIButton) {
    ProcedureButtonText = selectedText
}

}

私は Swift と iOS に非常に慣れていないので、何が起こっているのか、なぜこのクラッシュが発生しているのか説明してもらえますか?

4

2 に答える 2

1

これの通常の理由は、ストーリーボードのどこかに、コードに存在しなくなったアウトレットへのリンクがあることです。この場合、 と呼ばれるようpickerです。

これは、コードの外部からどのような自動参照があるかを考えずにコードを変更したために発生する可能性があります。

ストーリーボード オブジェクトをチェックして、有効でなくなった接続を確認してください。

于 2015-08-02T01:26:22.740 に答える
1

ほとんどの場合、ストーリー ボードにアウトレット リンクがあり、このアウトレットがビュー コントローラー ファイルに存在しないことが原因です。該当するかどうかを確認します (ピッカーで)。

これを行うには、ストーリー ボードを開き、その特定の UI (この場合はピッカー) をタップし、コンセントに接続されているかどうかを確認します (図のように確認できます)。はいの場合は、バツ印を使用して削除します。エラーが解決されることを願っています。このアウトレットが必要な場合は、View Controller ファイルにそのメソッドを追加してください。

ここに画像の説明を入力

于 2015-08-02T01:42:04.017 に答える