please help, this error broke my app. I have two classes: First Class-Poets
class Poets
{
var poetName:String = ""
var poetYearsOfLife:String = ""
var poetImage:String = ""
var poetBiography:String = ""
var books=[Works]()
}
Second class Work
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"
}
}
How I can fix this bug?
fatal error: NSArray element failed to match the Swift Array Element type
I have Work1.plist. I try to make a segue and to pass values from plist associated with a particular poetName from Poets1.plist in a table.Sorry for my bad English.
<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>
My suggestion is to add an initializer to your Works
class:
class Works {
var nameWork = ""
var workPoet = ""
init(nameWork: String, workPoet: String) {
self.nameWork = nameWork
self.workPoet = workPoet
}
}
Then you can use it like this:
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)
}