我遇到了一個我在Xcode 7中編寫的Swift(2.0)應用程序的問題。基本上,我想將一個字符串保存到Core Data中,然後檢索它。聽起來很簡單,但我有一些問題。該應用程序是一個模擬炸彈,所以我正在寫它應該'引爆'爲Core Data的字符串的時間。然後,我想要檢索該字符串並對其進行處理。傳遞和檢索核心數據 - NSArray元素問題在Swift中
這裏是我的代碼保存在字符串中的核心數據:
let dteTime:NSDate = NSDate(timeIntervalSinceNow: 60*60*12) //Generate time 12 hours from now
let formatter:NSDateFormatter = NSDateFormatter()
formatter.timeStyle = NSDateFormatterStyle.LongStyle
formatter.dateStyle = NSDateFormatterStyle.LongStyle
let strStringValue:String = formatter.stringFromDate(dteTime)
print(strStringValue) //Prints 'October 20, 2015 at 5:53:18 AM GMT+11' as expected
let newTime = NSEntityDescription.insertNewObjectForEntityForName("Time", inManagedObjectContext: context)
newTime.setValue(strStringValue, forKey: "dateTimeExplode")
do {
try context.save()
} catch _ {
print("Error saving core data")
}
我已經證實,計算時間從現在是12小時工作的,它是正確格式化爲一個字符串。
下面是檢索從核心數據條目中的代碼:
let request = NSFetchRequest(entityName: "Time")
request.returnsObjectsAsFaults = false
var results:[TimeCoreData] = [TimeCoreData]()
results = (try! context.executeFetchRequest(request)) as! [TimeCoreData]
if results.count > 0 { // Data retrieved
var dteTimeExplode:String = String()
for res in results { //CRASHES
dteTimeExplode = res.dteTimeDateExplode
}
}
你得原諒我的任何困惑在這裏,但dteTimeExplode
實際上是一個字符串,而不是日期。它最初是一個NSDate(),但我遇到了問題,所以爲了簡化它,我將其更改爲一個字符串。在整個代碼中可能會出現這種情況。你可以看到,我正在將核心數據檢索到一個自定義對象中,該對象定義如下。我已經複製了整個swift文件。
import UIKit
import CoreData
import Foundation
@objc(TimeCoreData)
class TimeCoreData: NSManagedObject {
@NSManaged var dteTimeDateExplode:String
}
此刻,當它到達應用程序崩潰到for res in results {
與錯誤消息
fatal error: NSArray element failed to match the Swift Array Element type
據我所知,正在被接收,因爲夫特此錯誤消息(在上面的第二代碼塊標記的)試圖從另一個類型的數據中創建一個類型的數組,但它不能這樣做,但我不明白爲什麼會是這種情況。我將一個字符串保存到核心數據中,所以我應該檢索一個字符串。我的自定義對象(TimeCoreData
)只有一個變量並且是字符串類型。
什麼我錯在這裏做什麼?
爲什麼在循環的每次迭代中,您將不同的值重新分配給'dteTimeExplode'字符串? – Mundi
@Mundi我重新分配值,因爲我想要存儲的最新值,所以我循環直到Core Data中沒有更多行。這應該只能是1,因爲我在保存之前截斷了實體,但我只是確保在以前的項目中遇到問題。 –