Swift - 从核心数据中获取字符串并在UTF8中转换

时间:2014-07-08 14:31:01

标签: string core-data swift

我正在尝试获取"内容"的字符串但是当我执行应用程序崩溃的代码时...当我尝试使用self.content.text = "\(theText)"时,它可以工作,但我想编码为UTF8,因为我使用cyrilic,我回来了这些\U0421\U044a\U0434\U044a\U0440\U0436\U0430\U043d\U0438\U0435 \U043d\U0430 \U043f\U0438\U0449\U043e\U0432\U0430任何可以修复的人问题?

以下是代码:

     let appDel: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
        let context: NSManagedObjectContext = appDel.managedObjectContext
        let theReq = NSFetchRequest(entityName: "Entity1")
        theReq.returnsObjectsAsFaults = false
        let myPredicate = NSPredicate(format: "objectId == \"\(contentID)\"")
        theReq.predicate = myPredicate
        let executed:AnyObject = context.executeFetchRequest(theReq, error: nil) as Array
        let theText : AnyObject = executed.valueForKey("content")
        self.content.text = theText

1 个答案:

答案 0 :(得分:2)

这与编码问题无关。

  • executeFetchRequest()返回托管对象的数组
  • valueForKey()应用于该数组会返回值的数组
  • 打印数组的 description 使用\Unnnn转义序列 非ASCII字符。

所以解决方案应该很简单:选择获取数组的单个元素:

let executed = context.executeFetchRequest(theReq, error: nil)[0] as NSManagedObject
let theText = executed.valueForKey("content") as String
self.content.text = theText

当然还应检查fetch是成功还是失败,以及是否返回 任何对象。更详细的版本如下所示:

var error : NSError?
let result = context.executeFetchRequest(theReq, error: &error)
if !result  {
    println("fetch failed: \(error)")
} else if result.count == 0 {
    println("nothing found")
} else {
    let obj = result[0] as NSManagedObject
    let theText = obj.valueForKey("timeStamp") as String
    self.content.text = theText
}