2016-03-28 17 views
18

Table View ve Segmented Control ile bir uygulama yaptım ve bu benim ilk kez. Bazı kodları ve bazı öğreticileri kullanıyorum ama işe yaramıyor. Uygulamamı çalıştırdığınızda O Yaralandı ve günlüklerinde bu hata gösteriyor:Nasıl düzeltilir? Hata: Bu sınıf anahtar tablo için kodlama uyumlu anahtar değer değil. '

MyApplication[4928:336085] * Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key tableView.' * First throw call stack: ( 0 CoreFoundation 0x000000010516fd85 __exceptionPreprocess + 165 1 libobjc.A.dylib 0x0000000105504deb objc_exception_throw + 48 2 CoreFoundation 0x000000010516f9c9 -[NSException raise] + 9 3 Foundation 0x000000010364e19b -[NSObject(NSKeyValueCoding) setValue:forKey:] + 288 4 UIKit 0x0000000103c37d0c -[UIViewController setValue:forKey:] + 88 5 UIKit 0x0000000103e6e7fb -[UIRuntimeOutletConnection connect] + 109 6 CoreFoundation 0x00000001050a9890 -[NSArray makeObjectsPerformSelector:] + 224 7 UIKit 0x0000000103e6d1de -[UINib instantiateWithOwner:options:] + 1864 8 UIKit 0x0000000103c3e8d6 -[UIViewController _loadViewFromNibNamed:bundle:] + 381 9 UIKit 0x0000000103c3f202 -[UIViewController loadView] + 178 10 UIKit 0x0000000103c3f560 -[UIViewController loadViewIfRequired] + 138 11 UIKit 0x0000000103c3fcd3 -[UIViewController view] + 27 12 UIKit 0x000000010440b024 -[_UIFullscreenPresentationController _setPresentedViewController:] + 87 13 UIKit 0x0000000103c0f5ca -[UIPresentationController initWithPresentedViewController:presentingViewController:] + 133 14 UIKit 0x0000000103c525bb -[UIViewController _presentViewController:withAnimationController:completion:] + 4002 15 UIKit 0x0000000103c5585c -[UIViewController _performCoordinatedPresentOrDismiss:animated:] + 489 16 UIKit 0x0000000103c5536b -[UIViewController presentViewController:animated:completion:] + 179 17 UIKit 0x00000001041feb8d __67-[UIStoryboardModalSegueTemplate newDefaultPerformHandlerForSegue:]_block_invoke + 243 18 UIKit 0x00000001041ec630 -[UIStoryboardSegueTemplate _performWithDestinationViewController:sender:] + 460 19 UIKit 0x00000001041ec433 -[UIStoryboardSegueTemplate _perform:] + 82 20 UIKit 0x00000001041ec6f7 -[UIStoryboardSegueTemplate perform:] + 156 21 UIKit 0x0000000103aa6a8d -[UIApplication sendAction:to:from:forEvent:] + 92 22 UIKit 0x0000000103c19e67 -[UIControl sendAction:to:forEvent:] + 67 23 UIKit 0x0000000103c1a143 -[UIControl _sendActionsForEvents:withEvent:] + 327 24 UIKit 0x0000000103c19263 -[UIControl touchesEnded:withEvent:] + 601 25 UIKit 0x0000000103b1999f -[UIWindow _sendTouchesForEvent:] + 835 26 UIKit 0x0000000103b1a6d4 -[UIWindow sendEvent:] + 865 27 UIKit 0x0000000103ac5dc6 -[UIApplication sendEvent:] + 263 28 UIKit 0x0000000103a9f553 _UIApplicationHandleEventQueue + 6660 29 CoreFoundation 0x0000000105095301 _CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION_ + 17 30 CoreFoundation 0x000000010508b22c __CFRunLoopDoSources0 + 556 31 CoreFoundation 0x000000010508a6e3 __CFRunLoopRun + 867 32 CoreFoundation 0x000000010508a0f8 CFRunLoopRunSpecific + 488 33 GraphicsServices 0x000000010726dad2 GSEventRunModal + 161 34 UIKit 0x0000000103aa4f09 UIApplicationMain + 171 35 Dhikr 0x0000000101f26282 main + 114 36 libdyld.dylib 0x00000001064c392d start + 1 ) libc++abi.dylib: terminating with uncaught exception of type NSException

kullandığım kod şudur: Burada

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 

let foodList:[String] = ["Bread", "Meat", "Pizza", "Other"] 
let drinkList:[String] = ["Water", "Soda", "Juice", "Other"] 

@IBOutlet weak var mySegmentedControl: UISegmentedControl! 
@IBOutlet weak var myTableView: UITableView! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view. 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

    var returnValue = 0 

    switch(mySegmentedControl.selectedSegmentIndex) { 
    case 0: 
     returnValue = foodList.count 
     break 
    case 1: 
     returnValue = drinkList.count 
     break 
    default: 
     break 
    } 

    return returnValue 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let myCell = tableView.dequeueReusableCellWithIdentifier("myCells", forIndexPath: indexPath) 

    switch(mySegmentedControl.selectedSegmentIndex) { 
    case 0: 
     myCell.textLabel!.text = foodList[indexPath.row] 
     break 
    case 1: 
     myCell.textLabel!.text = drinkList[indexPath.row] 
     break 
    default: 
     break 
    } 

    return myCell 
} 

@IBAction func segmentedControlActionChanged(sender: AnyObject) { 
    myTableView.reloadData() 
} 

enter image description here

main.Storyboard olduğunu

Kodu birçok kez kontrol ettim, ancak çalışmıyor. İlk olarak, sadece Table View'u kullanmak zorunda kaldım, bu öğreticiyi izliyorum (https://www.youtube.com/watch?v=ABVLSF3Vqdg). Segmented Control'u öğretici olarak kullanacağımı düşündüm. Ama hala çalışmıyor. Aynı kod, aynı hata. Birisi bana yardım edebilir mi?

+1

bunu kontrol edin. http://stackoverflow.com/questions/10152872/this-class-is-not-key-value-coding-compliant-for-the-key-view – Sahil

+0

Benzer bir sorunla karşılaştım. Bunun sebebi, uygulamam için iki plan/hedef ürettiğim ve görünüm denetleyicisinin yalnızca şemalardan/hedeflerden birinde eklendiğiydi ve diğer hedef/şemayı çalıştırıyordum. Viewcontroller sınıfını tüm hedeflere/şemalara eklemek sorunu çözdü. –

cevap

50

tableView adında bir çıkış beklemek için film şeridinizi hazırlayın, ancak gerçek çıkış adı myTableView.

Film şeridindeki bağlantıyı silerseniz ve doğru değişken adına yeniden bağlarsanız, sorunu giderir.

+0

Ya problem buldum, teşekkürler. – Emm

+1

Bağlantı nasıl silinir? – pete

+0

Sözcüğüm, tüm bağlantıları görmek ve onları silmek için storyboard içindeki şeylere tıklamak zorunda mıyım? Hikaye panosunda hangi şeylerin koddaki şeylerle bağlantılı olduğunu gösteren bazı arayüzler var mı? Aynı zamanda henüz – pete

4

Tablo görünümünüzün adını bir noktada "tableView" dan "myTableView" olarak değiştirdiğiniz olasılığınız var mı?