簡體   English   中英

Swift核心數據-使用NSManagedObject子類訪問獲取的實體時出錯

[英]Swift Core Data - Error accessing fetched entity with NSManagedObject Subclass

我正在嘗試獲取核心數據實體,並且遇到一個問題,我認為這是由於我使用了子類NSManagedObject。

嘗試打印獲取的對象之一時,出現以下錯誤:

Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)

這是我的“顯示” NSManagedObject子類:

import Foundation
import CoreData

@objc(Show)
class Show: NSManagedObject {

    @NSManaged var dateUpdated: NSDate
    @NSManaged var fontFilename: String
    @NSManaged var fontName: String
    @NSManaged var idShow: NSNumber
    @NSManaged var isActive: NSNumber
    @NSManaged var productIdentifier: String
    @NSManaged var title: String

}

這是我的助手類CoreDataManager.swift中的提取調用:

func fetchShows() -> Array<AnyObject>?
{
    // This function will fetch data for all available shows.
    // Return value will be an array of dictionaries (i.e. [0]->{Show, Characters})
    // i.e. Show Title, Store Product Identifier, Font, Characters, etc.
    var results = Array<AnyObject>()

    let context:NSManagedObjectContext = self.managedObjectContext!
    var error: NSError?
    var fetchRequest = NSFetchRequest()
    let entity = NSEntityDescription.entityForName("Show", inManagedObjectContext: context)
    fetchRequest.entity = entity

    let fetchedObjects = context.executeFetchRequest(fetchRequest, error: &error)! as Array
    for item in fetchedObjects
    {
        var showData = Dictionary<String, AnyObject>()
        let show: Show = item as Show
        showData.updateValue(show, forKey: "show")

        // Get Characters
        showData.updateValue(self.fetchCharactersForShow(show.idShow)!, forKey: "characters")
        results.append(showData)

        // Test
        self.printShow(show.idShow) //NOTE - THIS METHOD CREATES A NEW FETCH REQUEST USING THE PROVIDED SHOW ID AND SUCCESSFULLY PRINTS OUT THE SHOW DATA
    }
    return results
}

這是我現在嘗試從RootViewController.swift獲取的值的地方:

    //TESTING
    self.shows = CoreDataManager().fetchShows()!
    let showData = self.shows[0] as Dictionary<String, AnyObject>
    let show = showData["show"] as Show
    println("TEST: Show \(show.title) is active: \(show.isActive.boolValue)")
    /******/

這是“ Show”對象的調試器的屏幕截圖: 在此處輸入圖片說明

哇,我好笨。 看來問題出在我調用'fetchShows()'方法的方式上。 我實際上需要創建並分配一個“ CoreDataManager”對象,然后使用該對象調用該方法,而不是嘗試僅對類方法進行調用:

let DataManager = CoreDataManager()
self.shows = DataManager.fetchShows()

現在就可以了!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM