对于在我的核心数据中建模的基本Flashcard应用,我在Card
到Set
之间有一对多的关系。
每个Card1
都有一个集名称,集描述和许多card1s的关系。每个Set
都有正面,背面和照片。在我的表格视图中,我设法从核心数据中检索所有已保存的Set
并显示它们。现在,当用户点击我的下一个视图控制器中的相应单元格时,我想要获取每张// MARK: Properties
var finalArray = [NSManagedObject]()
override func viewDidLoad() {
getAllSets()
println(finalArray.count)
}
func getAllSets() {
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let managedContext = appDelegate.managedObjectContext!
let fetchRequest = NSFetchRequest(entityName:"Set")
var error: NSError?
let fetchedResults = managedContext.executeFetchRequest(fetchRequest,error: &error) as? [NSManagedObject]
println("Am in the getCardSets()")
if let results = fetchedResults {
finalArray = results
println(finalArray.count)
}
else {
println("Could not fetch \(error), \(error!.userInfo)")
}
}
// MARK: Displaying the data
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return finalArray.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! SetTableViewCell
let sets = finalArray[indexPath.row]
cell.setName.text = sets.valueForKey("setName")as? String
cell.setDescription.text = sets.valueForKey("setDescription")as? String
return cell
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "ShowDetail" {
let dest = segue.destinationViewController as! Display
// Get the cell that generated this segue.
if let selectedCell = sender as? SetTableViewCell {
let indexPath = tableView.indexPathForCell(selectedCell)!
let selectedSet = finalArray[indexPath.row]
dest.recievedSet = selectedSet
}
}
}
张卡片。
这是我的表视图控制器的代码:
recievedSet
在我的目标视图控制器中,如何检索[Card1]
中的所有卡片?我尝试将NSSet转换为数组并将其转换为CoreData: error: Failed to call designated initializer on NSManagedObject class 'NSManagedObject'
fatal error: Array index out of range
数组但是当我尝试在标签上显示第一个Card1的前String属性时,应用程序崩溃了,给了我错误
@IBOutlet weak var front: UILabel!
var finalArray = [Card1]()
finalArray = retrievedSet.allObjects as![Card1]
front.text = finalArray[0].front
这是我详细的viewController的代码。
cat
答案 0 :(得分:1)
为您的详细控制器提供var infoWindowContent = [
['<div class="info_content">' +
'<h3>' + markers[i][2] + '</h3>' +
'<p>' + markers[i][3] + '</p></div>']
];
类型的属性(我使用&#34; CardSet&#34;因为&#34; Set&#34;是Swift内置类型名称)。您将所选集传递给此控制器。
您可以拥有一个属性,您可以通过该属性对CardSet
的特定订单进行排序或生成数组。
allObjects
您的代码无效,因为var cardArray = [Card1]()
var cardSet: CardSet?
viewDidLoad() {
super.viewDidLoad()
if let validSet = cardSet {
cardArray = validSet.cards.allObjects as! [Card1]
}
}
的类型为finalArray
,因此[CardSet]
类型为finalArray[indexPath.row]
,无法转换为CardSet
类型。相反,关系到NSSet
s是您正在寻找的Card1
。
最后,我建议给详细控制器一个NSSet
,有一个要排序的属性,并在获取的结果控制器的谓词中使用传递的NSFetchedResultsController
。