2015-08-02 8 views
1

У меня есть приложение, которое имеет UIPickerView. Во-вторых, я пытаюсь открыть представление, в котором оно содержится, приложение вылетает с NSUnknownKeyException.Приложение для iOS Прерывает NSUnknownKeyException при попытке загрузить представление с помощью UIPickerView

Вот лог:

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 и прошивкой, так что вы можете также объяснить, что это происходит и почему происходит этот крах?

ответ

1

В большинстве случаев, это потому, что вы имеете ссылки на выход в раскадровке, и этот выход не существует не более в файле контроллер представления. Проверьте, так ли это (с вашим сборщиком).

Для этого откройте панель сообщений, коснитесь этого конкретного пользовательского интерфейса (сборщик в вашем случае), проверьте, подключен ли он к какой-либо розетке (вы можете проверить его, как показано на рисунке). Если да, то удалите его с помощью перекрестного знака. Надеюсь, ваша ошибка будет решена. Если вам нужна эта розетка, добавьте этот метод в файл контроллера вашего вида.

enter image description here

1

Обычная причина этого заключается в том, что где-то в вашем раскадровке у вас есть ссылка на розетку, которая больше не существует в коде. В этом случае это, по-видимому, называется picker.

Это может произойти из-за изменения кода, не задумываясь о том, какие автоматические ссылки есть для него вне кода.

Проверьте свои объекты раскадровки для более поздних соединений.