2016-06-02 1 views
3

私は、私はNSDictionaryのとNSArrayのに変換するために、多くのことを試みたが、それははANYOBJECT

var dictData:NSDictionary? 
    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
    let context = appDelegate.managedObjectContext; 
    // self.selectedArray = response.objectForKey("retailers") as! NSArray; 
    let fetchRequest2 = NSFetchRequest() 
    let entityDescription2 = NSEntityDescription.entityForName("Offers", inManagedObjectContext: context) 
    fetchRequest2.entity = entityDescription2 

    //fetchRequest2.returnsObjectsAsFaults = false 

    do { 
     let result2 : NSDictionary = try context.executeFetchRequest(fetchRequest2) as! NSDictionary 
        print("Result:",result2) 
     for result in (result2 as? NSDictionary)!{ 

      if let data : NSDictionary = result as? NSDictionary{ 

       print(data) 
      } 

オファーエンティティはありませんが含まれている任意のtype.`をキャストすることはできませんANYOBJECTを返しcoreDataからのフェッチエンティティデータ、午前を返します。フィールドの。親切に助けてください。それは評価されるだろう。

   print("result: ",result) 
       print("dictData:",dictData) 

`}

答えて

5

context.executeFetchRequest()戻り[AnyObject]AnyObjectではありません。

あなたは実行する必要があります。

if let results = context.executeFetchRequest(fetchRequest2) as? [MyObjectType] { 
     for object in results { 
     //do thing 
    } 
    } 
+0

[MyObjectType] –

+1

あなたのエンティティタイプは何でも構いません。 – sschale

1

常にAnyObject配列を返しexecuteFetchRequestその署名によります。戻り値はフェッチ要求によってNSManagedObjectまたはDictionaryになる可能性があるため、AnyObjectです。

デフォルトの戻り値は、そのタイプの強制アンラップが安全である

let result2 = try context.executeFetchRequest(fetchRequest2) as! [NSManagedObject] 

を書く非オプション[NSManagedObject]であるこの場合で、オプションのバインディングの必要はありません。

NSManagedObjectのサブクラスを使用している場合は、戻り値をその型にキャストすることもできます。

+0

私はそれがnsmanagedObjectを返すことを理解していますが、nsmanagedobjectをnsdictionaryまたはnsarrayにキャストできますか?私はさらに説明が必要です –

+0

'[NSManagedObject]'を返します。 'NSDictionary'や' NSArray'を使わないでください。Swiftネイティブタイプの 'Dictionary'と' Array'を使用してください。 '[NSManagedObject]' **は**配列です。 – vadian

+0

[NSManagedObject]は辞書の配列です。他の配列を使用する場合と同じように使用できます。 – Starlord

関連する問題