2015-10-19 16 views
0

我遇到了一個我在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)只有一個變量並且是字符串類型。

下面是我的核心數據模型的截圖: Core Data Model

什麼我錯在這裏做什麼?

+0

爲什麼在循環的每次迭代中,您將不同的值重新分配給'dteTimeExplode'字符串? – Mundi

+0

@Mundi我重新分配值,因爲我想要存儲的最新值,所以我循環直到Core Data中沒有更多行。這應該只能是1,因爲我在保存之前截斷了實體,但我只是確保在以前的項目中遇到問題。 –

回答

0

看起來你還沒有告訴你的模型Time實體應該使用TimeCoreData類。我建議你採取最簡單的路線,並通過將NSManagedObject子類名稱更改爲Time來重構。