CoreData:错误:无法在 NSManagedObject 类“视频”上调用指定的初始化程序

Posted

技术标签:

【中文标题】CoreData:错误:无法在 NSManagedObject 类“视频”上调用指定的初始化程序【英文标题】:CoreData: error: Failed to call designated initializer on NSManagedObject class 'Video' 【发布时间】:2016-07-11 22:20:23 【问题描述】:

我目前遇到核心数据错误和“发送到实例 # 的选择器无法识别”。我似乎无法弄清楚发生了什么。这是代码。

import UIKit
import Alamofire

protocol FetchResultsControllerDelegate 
func dataReady()


class PNSClient: NSObject 

var pnsVideos = [Video]()
var delegate: FetchResultsControllerDelegate?

func getFeedVideos() 

    // Fetch the videos dynamically through the YouTube Data API
    Alamofire.request(.GET, Constants.YouTubeURL, parameters: [Parameters.Part: Parameters.Snippet, Parameters.PlaylistId: Constants.UPLOADS_PLAYLIST_ID, Parameters.Key: Constants.API_KEY, Parameters.MaxResults : 50], encoding: .URL, headers: nil)
        .validate()
        .responseJSON  (response) -> Void in

        switch response.result 
        case .Success(let JSON):
            print("Success with JSON: \(JSON)")

            let response = JSON as! NSDictionary
            let userID = response.objectForKey("items")
            print(userID)

        case .Failure(let error):
            print("Request failed with error: \(error)")
        

        if let JSON = response.result.value 

            var arrayOfPNSVideos = [Video]()

            for video in JSON["items"] as! NSArray 
                print(video)

                let videoObj = Video()
                videoObj.videoId = video.valueForKeyPath("snippet.resourceId.videoId") as? String
                videoObj.videoTitle = video.valueForKeyPath("snippet.title") as? String
                videoObj.videoDescription = video.valueForKeyPath("snippet.description") as? String
                if let highUrl = video.valueForKeyPath("snippet.thumbnails.high.url") as? String 
                    videoObj.videoThumbnailUrl = highUrl

                arrayOfPNSVideos.append(videoObj)
            

            self.pnsVideos = arrayOfPNSVideos

            if self.delegate != nil 
                self.delegate?.dataReady()
                
        
    

如果查看 repo 会有所帮助:www.github.com/pbellot77/pop-nutshell

【问题讨论】:

问题出现在哪一行? 除非有所改变,否则您不能用Video() 实例化NSManagedObject。它必须使用NSManagedObjectContext 插入。 我在 PNSClient 的第 51 行收到错误消息。我正在尝试将对象直接存储到核心数据中以实现可重用性。 当我在异常处设置断点时,应用程序在第 51、52 ​​行停止,然后因线程 1:SIGABRT 而崩溃 我更新了 repo。现在我遇到了插入错误。 ?????????? 【参考方案1】:

要将对象存储到 CoreData 中,您需要遵循以下模式。我建议您阅读 CoreData 上的 tutorial 或 docs。

let entity = NSEntityDescription.entityForName("Video", inManagedObjectContext: managedObjectContext!) 
// you need to make sure you have a reference to your CoreData managedObjectContext
    let videoObj = NSManagedObject(entity: entity!, insertIntoManagedObjectContext: managedObjectContext!) as? Video
    videoObj.property1 = "some value"
    videoObj.videoId = video.valueForKeyPath("snippet.resourceId.videoId") as? String

// etc ...


do 
    try managedObjectContext!.save()

catch 
    print("Error saving video changes: \(error)")

【讨论】:

以上是关于CoreData:错误:无法在 NSManagedObject 类“视频”上调用指定的初始化程序的主要内容,如果未能解决你的问题,请参考以下文章

在 NSManagedObject 类中初始化 @NSManaged 变量?

在 Core Data 中,NSManaged 对象上的 URI 属性类型应该用于啥?

对于 @NSManaged 变量,fileprivate 是不是足够?

存储的属性需要一个初始值或者应该是@NSManaged

PHPhotos 和核心数据。 PHObject 使用啥 NSManaged 对象类型?

分配给@NSManaged public var locks UI