2014-09-28 74 views
-1

我想從核心數據中獲取一些數據,並且遇到輕微問題。我可以毫無問題地獲取數據。如果我println(data)它將顯示fooBar不與存儲在它的數據存在SWIFT - 'AnyObject'沒有成員名'fooBar'

"'AnyObject' does not have a member name 'fooBar'

:那一刻我試圖抓住特定的數據塊(即data.fooBar),它拋出了一個錯誤。

我不確定它爲什麼這樣做。我試圖尋找答案,並嘗試了一堆不同的東西,但似乎沒有任何工作。任何幫助都會很棒。謝謝。 :)

var results : Array<AnyObject> = [] 


    func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) { 

    //get the data for that storedItem 
    var appDel:AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate 
    var context:NSManagedObjectContext = appDel.managedObjectContext! 
    let req = NSFetchRequest(entityName: "storedItems") 

    let name:String = results[indexPath.row].name 
    req.predicate = NSPredicate(format: "name == %@", name) 
    req.returnsObjectsAsFaults = false 

    var tapResults = context.executeFetchRequest(req, error: nil)! 

    for item in tapResults { 
     println(item) //works, shows all data correctly(including subText) 
     println(item.name) //works, the only one that does for some reason??? 
     println(item.subText) //Error 'AnyObject' does not have a member name 'subText' 
    } 

下面是結果:println(item)

println(item) <NSManagedObject: 0x7f04be60> (entity: storedItems; id: 0x7f041de0 <x-coredata://DD4F8E68-2234-46B5-B1D8-AE2F75245C63/storedItems/p1> ; data: { 
alarmSound = default; 
isDefault = 0; 
name = "test"; 
sliderHours = 0; 
sliderMinutes = 0; 
sliderSeconds = 0; 
subText = "00:00:00"; 

UPDATE:基於以上vacawama答案的討論(謝謝阿龍)。如需正確的解決方案,請參閱我接受的答案。

我itemObj類

@objc(itemObj) 
    class itemObj: NSManagedObject { 

     @NSManaged var name:String! 
     @NSManaged var sliderHours:NSNumber 
     @NSManaged var sliderMinutes:NSNumber 
     @NSManaged var sliderSeconds:NSNumber 
     @NSManaged var subText:String! 
     @NSManaged var alarmSound:String! 
     @NSManaged var isDefault:NSNumber 
    } 

我的AddItem VC:

var tResults = (context.executeFetchRequest(req, error: nil)) 

    for item in tResults as [itemObj!] { 

     println(item.name) 
     println(item.subText) 

    } 
+0

swift是類型安全的,有100多個問題處理問題完全一樣。 – 2014-09-28 13:28:27

+0

@ Daij-Djan感謝downvote,正如你在我的問題中看到的,我一直在尋找一段時間(仍然是)。你能提供一個可以幫助我的鏈接嗎? – 2014-09-28 13:31:54

+1

許多相關部分中的鏈接相匹配。當你問一個鏈接:試試這個:(我檢查它,它確實解釋它)http://stackoverflow.com/questions/24770515/swift-anyobject-does-not-have-a-member-named-removeatindex? rq = 1 OR this:http://stackoverflow.com/questions/25223549/swift-anyobject-does-not-have-a-member-named-make?rq=1 – 2014-09-28 13:35:28

回答

3

executeFetchRequest返回AnyObject一個可選的陣列。你不應該強制解開它(這可能導致崩潰)。所以可選解開它,做一個可選的CAST(as?),以確保該類型是正確的:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    let appDel:AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate 
    let context:NSManagedObjectContext = appDel.managedObjectContext! 
    let req = NSFetchRequest(entityName: "storedItems") 

    let name:String = results[indexPath.row].name 
    req.predicate = NSPredicate(format: "name == %@", name) 
    req.returnsObjectsAsFaults = false 

    let tapResults = context.executeFetchRequest(req, error: nil) 

    if let presentResults = tapResults { 
     if let castedResults = presentResults as? [MyManagedObjectSubclass] { 
      for item in castedResults { 
       println(item) 
       println(item.name) 
       println(item.subText) 
      } 
     } 
    } 
} 

我也改變了所有的var S的let小號,因爲他們並不需要是可變的。

只需用您的NSManagedObject子類替換MyManagedObjectSubclass即可。

+1

我明白了,生病了,看看這裏發生了什麼......謝謝。 – 2014-09-28 18:29:57

相關問題