2017-06-10 55 views
0

我有稱爲「設備」與一個屬性稱爲「asset_tag」用下面的代碼沿着核心數據實體:Retrive對象從取請求夫特

var endArray: [Device] = [] 

var request = NSFetchRequest<NSFetchRequestResult>() 
      request = Device.fetchRequest() 
      request.returnsObjectsAsFaults = false 

endArray = try context.fetch(request) as! [Device] 

print (endArray) 

此打印出以下內容:

[<Device: 0x608000092c00> (entity: Device; id: 0xd000000000140000 <x-coredata://22AC91EB-92B1-4E5B-A5A9-A5924E0ADD3E/Device/p5> ; data: { 
    "asset_tag" = 26; 
})] 

所有我希望它打印出來是[ '26']

+0

讀取請求返回字典可以循環endArray和打印值的數組。 –

+0

@TusharSharma是的,但它返回一個包含所有垃圾的數組。有沒有辦法返回值的數組? – Martheli

+0

你可以從鑰匙中獲得價值。 –

回答

0

你明白了,因爲endArray[Device],這意味着它的每個條目都是Device。打印數組時,您得到的結果是在數組中的每個條目上調用debugDescription

如果你只是想在一個數組的asset_tag屬性的整數值,您可以使用map獲得該數組:

let tagValues : [Int] = endArray.map { Int($0.asset_tag) } 

這是說tagValues具有類型[Int],那你分配一個值通過使用mapendArray中的每個條目獲取一個值。通過在每個條目上查找asset_tag的值可以找到該值。結果是對應於asset_tag值的Int的數組。

1

嘗試喜歡這個 - :

func loadData(){ 
      let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 

      do{ 
       endArray = try context.fetch(request) as! [Device] 
       for data in 0..< endArray!.count{ 
        if let value = endArray?[data].value(forKey: "Your Key") { 
         print(value) 
        } 
       } 
      }catch{ 

      } 


     } 
+0

我得到的錯誤不能爲索引類型爲「Device」的[Device]下標值。 – Martheli

+0

@Martheli能顯示您的提取代碼嗎? –

0

首先,如果您使用NSManagedObject子類,請使用特定的提取請求來避免類型轉換。而NSFetchRequest是參考類型。將該請求聲明爲常量(let)。

取回請求總是返回實體[NSManagedObject]的數組。 垃圾很重要。該對象可以包含許多屬性和關係。

爲了得到特定屬性的陣列使用map功能

var endArray = [Device]() 

let request : NSFetchRequest<Device> = Device.fetchRequest() 
request.returnsObjectsAsFaults = false 

do { 
    endArray = try context.fetch(request) 
    let tagArray = endArray.map { $0.asset_tag } 
    print(tagArray) 
} catch { print(error) }