我目前正在使用Xcode 6 beta 7,并决定在创建项目后我需要CoreData.我已经看过一些已经问过这个目标C的问题以及关于这个主题的观看视频,但我似乎得到了同样的错误.至于我对CoreData框架本身的使用,我很确定它是正确的,因为我创建了另一个空项目(检查了CoreData框)并遵循相同的实现,它就像一个魅力,但可能有些不对劲我是在那里做.以下是我在Swift项目中实现CoreData的步骤.
第1步:我通过"Build Phase"下的"Link Binary with Libraries"选项卡添加了CoreData框架
第2步:然后我去了我需要实现CoreData的任何.swift文件(appDelegate.swift和现在的另一个文件)并添加了以下行:
import CoreData
Run Code Online (Sandbox Code Playgroud)
到顶部.
第3步:我创建了一个名为"cData"的实体的数据列表,然后为它创建了一个名为"data.swift"的类.这是data.swift:
import UIKit
import CoreData
@objc( data )
class data: NSManagedObject {
@NSManaged var something : String
}
Run Code Online (Sandbox Code Playgroud)
第4步:我编写代码实际将数据保存在另一个文件中:
@IBAction func useCoreData(sender: AnyObject)
{
let AD : AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
let ct : NSManagedObjectContext = AD.managedObjectContext!
let ent = NSEntityDescription.entityForName( "CData", inManagedObjectContext: ct )
var dat = data( entity: ent!, insertIntoManagedObjectContext: ct )
dat.something = someTextField.text
ct.save( nil )
println(dat)
}
Run Code Online (Sandbox Code Playgroud)
第5步:我认为这是搞砸的地方,尽管我可能错了.我在一个单独的Mac上创建了一个新项目(所以我可以将它命名为同一个东西)并检查CoreData框.然后我将整个appDelegate.swift从这个项目复制到我当前的项目中.这是我的appDelegate.swift:
import UIKit
import …Run Code Online (Sandbox Code Playgroud) 我无法从表格视图单元格中访问swift中的可选字符串.每个单元格都有一个标题标签和一个详细文本标签,表格视图中任何给定时间的单元格数量取决于用户(表格视图用于显示保存的值).由于在每个单元格中保存为详细文本标签文本的字符串太长而无法在表格视图中读取,因此我希望将它们加载到按下单元格时所引用的另一个视图中.这是我对segue方法的准备:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "cellSegue"
{
let cell = tableView.cellForRowAtIndexPath(tableView.indexPathForSelectedRow()!)
var transfer : ExplanationView = segue.destinationViewController as ExplanationView
if let unwrapped = cell?.textLabel?.text!
{
transfer.infoText.text = unwrapped
}
}
}
Run Code Online (Sandbox Code Playgroud)
当执行segue时,我会遇到致命的崩溃,违规行是"transfer.infoText.text = unwrapped",Xcode告诉我在打开可选项时发现nil.在我的调试过程中,我尝试过"println(cell?.textLabel?.text!)"和Xcode打印"Optional(String)",其中"String"是我试图访问的实际字符串,所以看起来像我我走在正确的轨道上,但显然有一些我不知道的东西.我也试过"cell?.textLabel?.text",但我得到了同样的错误.任何帮助表示赞赏