2015-04-27 1 views
1

, пожалуйста, помогите, эта ошибка сломала мое приложение. У меня есть два класса: Первоклассный ПоэтыПоэта. Книги бросают фатальную ошибку: элемент NSArray не соответствует

class Poets 
{ 

    var poetName:String = "" 
    var poetYearsOfLife:String = "" 
    var poetImage:String = "" 
    var poetBiography:String = "" 
    var books=[Works]() 
} 

Второй класс Работа

class Works 
{ 
    var nameWork:String = "" 
    var workPoet:String = "" 
} 

TableViewController

var poetsPath = NSBundle.mainBundle().pathForResource("Poets1", ofType: "plist") 
    var poetsArray = NSArray(contentsOfFile: poetsPath!)! 
    var booksPath = NSBundle.mainBundle().pathForResource("Works1", ofType: "plist") 
    var booksDict = NSDictionary(contentsOfFile: booksPath!) 

    for poetArray in poetsArray 
    { 
     let poet=Poets() 

     poet.poetName = poetArray["name"] as! String 
     poet.poetImage = poetArray["image"] as! String 
     poet.poetYearsOfLife=poetArray["yearsOfLife"] as! String 
     poet.poetBiography=poetArray["biography"] as! String 
      poets.append(poet) 



     poet.books = booksDict![poet.poetName as String] as! [(Works)]//<---error 
     for bookArray in poet.books { 
      var book=Works() 
      book.nameWork = "nameWork" 



      } 
    } 

Как я могу исправить эту ошибку?

fatal error: NSArray element failed to match the Swift Array Element type 

У меня есть Work1.plist. Я пытаюсь сделать segue и передать значения из plist, связанные с определенным именем поэта из Poets1.plist в таблице. Простите за мой плохой английский.

<plist version="1.0"> 
<dict> 
<key>poet_name1</key> 
<array> 
    <dict> 
     <key>nameWork</key> 
     <string>Благовест</string> 
     <key>work</key> 
     <string>Среди дубравы</string> 
    </dict> 
</array> 
<key>poet_name2</key> 
<array> 
    <dict> 
     <key>nameWork</key> 
     <string>Бессонные ночи</string> 
     <key>work</key> 
     <string>Какой кошмар!</string> 
    </dict> 
</array> 
</dict> 
</plist> 
+0

Как я понимаю ваш пример кода, 'booksDict! [poet.poetName as String] 'будет массивом словарей, а не массивом или объектами' Works'. – Moritz

+0

Да, booksDict! [Poet.poetName as String] - это набор словарей, и я не понимаю, как связать эти словари с поэтомName.Nothing works :(Когда я пытаюсь установить книгиDict! [Poet.poetName as String] тип NSArray, таблица в третьем сегменте становится пустым @ ericd – Diana

ответ

0

Мое предложение добавить инициализатор к вашему Works класс:

class Works { 

    var nameWork = "" 
    var workPoet = "" 

    init(nameWork: String, workPoet: String) { 
     self.nameWork = nameWork 
     self.workPoet = workPoet 
    } 
} 

Затем вы можете использовать его как это:

let worksArray = booksDict[poet.poetName as String] as! NSArray 
for work in worksArray { 
    let dictionaryFromArray = work as! NSDictionary 
    let workObject = Works(nameWork: dictionaryFromArray["nameWork"] as! String, workPoet: dictionaryFromArray["work"] as! String) 
    poet.books.append(workObject) 
} 
+1

Большое спасибо, много. Это работает. # happyhappyhappy – Diana