2016-03-29 12 views
0

Ben 'viewDidLoad' inKomut sinyali nedeniyle başarısız oldu: Segment ayırma hatası: 11 TableViewController nedeniyle? Benim içinde

var dataObj : [String: AnyObject]! 
var letters : Int! 
var currentSection : Int!; 
var currentRow : Int! 

: 'DictionaryTableViewController: UITableViewController' sınıfına aşağıda değişkenleri tanımlamak

let jsonUrl = NSBundle.mainBundle().URLForResource("dictionary", withExtension: "json") 
    var data = NSData(contentsOfURL: jsonUrl!) 
    func dataReturn(object: [String: AnyObject]) { 
     dataObj = object 
     letters = object["collection"]!.count 
    } 

    do { 
     let object = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments) 
     if let dictionary = object as? [String: AnyObject] { 
      dataReturn(dictionary) 
     } 
    } catch { 
     // Handle Error 
    } 

Bu benim çekiyorum JSON dosyasına temel yapıdır Ben tableView hücresini stilini giderken şimdi bunun bu hataya neden budur inanıyoruz Yani

{ 
     "collection": [{ 
      "letter": "A", 
      "words": [{ 
       "word" : "Apple", 
       "definition" : "Tasty fruit" 
      }] 
     },{ 
      "letter": "B", 
      "words": [{ 
       "word" : "Banana", 
       "definition" : "Meh, not bad." 
      }] 
     },{ 
      "letter": "C", 
      "words": [{ 
       "word" : "Carrots", 
       "definition" : "hooock twooo!" 
      }] 
     }] 
    }  

NSBundle

dan:

Command failed due to signal: Segmentation fault: 11

  1. While emitting SIL for 'tableView' at /Users/me/Desktop/.../DictionaryTableViewController.swift:70:14

Uyarı olarak, bu sorunu xcode 7.3'e yükledikten sonra alıyorum. Bu sorun dan olma hata yazan yere ila 7.2

Hat 70 mevcut değildi okur:

Line 70: override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath) 
     //let currentSelection = dataObj["collection"]![indexPath.section]["words"]!![indexPath.row]! 
     let currentSelection = dataObj["collection"]![indexPath.section]["words"]!![indexPath.row]!!! 
     cell.textLabel?.text = currentSelection["word"] as? String 
     cell.detailTextLabel?.text = currentSelection["definition"] as? String 
     return cell 
    } 

Not: Yukarıdaki kodunda açıklanır hat xcode 7.2 düzgün çalışıyordu. Xcode7.3 bana bir sözdizimi hatası verdi (Abonenin belirsiz kullanımı). Yorumlanan satırın hemen altındaki kod, sözdizimi hatası oluşturmayan değişikliklerimdir. Sorunuma neden olan bu mu? Burada gerçekten bir kayıp yaşıyorum ve bir cevap bulamıyorum. Herhangi bir yardım takdir edilir!

+0

Bu bir lotta '' 'bu hatta devam ettiniz. JSON sözlüğünün her bir öğesinin koşulsuz olarak kaldırılmasını ve bir şey "nil" ise bir mesaj yazdırmayı denediniz mi? Bu, işlerin yanlış gittiği yeri size söyler ... –

+0

Katılıyorum ve bana mantıklı gelmiyor ama sözdizimi hataları üretmeyen sözdizimi. Önerilerinizi denemedim, ancak arayı çözmek için bunu denemeye ve basitleştirmeye gerek duyabilirim. – user3612986

cevap

1

Hata ayıklama amacıyla, böyle bekçi tabloların bir dizi bütün kuvvet-Çizelgesi seçeneklere sahip çizgiyi yıkmak olacaktır: onlardan biri eğer böyle

guard let collection = dataObj["collection"] else { fatalError("collection is nil") } 

guard let words = collection[indexPath.section]["words"] else { fatalError("words is nil") } 

guard let word = words[indexPath.row] else { fatalError("word is nil") } 

Something, yinede size söyleyecektir Zorla açılmamış isteğe bağlı isteğe neden oluyordu.

+0

İster inanın ister inanmayın ... ama bunu yapmak işe yaradı! Sen bir sihirbazsın! Teşekkürler @Roman – user3612986

İlgili konular