解析子类实例方法EXC_BAD_INSTRUCTION

时间:2015-12-23 12:53:22

标签: ios swift parse-platform exc-bad-access exc-bad-instruction

从解析用户对象PFUser进行子类化时,使用自己的方法时会出现错误的指令错误。你们有没有想过为什么会这样?

User.swift

import UIKit
import Parse

class User: PFUser {

    // Instance Variables
    @NSManaged var photo: PFFile

    // Parse Setup
    override class func initialize() {
        struct Static {
            static var onceToken : dispatch_once_t = 0;
        }
        dispatch_once(&Static.onceToken) {
            self.registerSubclass()
        }
    }

    // Instance Methods
    func fetchPhoto(callback: (image: UIImage) -> Void) {
        guard let url = self.photo.url else {
            return
        }

        let request = NSURLRequest(URL: NSURL(string: url)!)

        if let image = Globals.imageCache.imageForRequest(request) {
            callback(image: image)
            return
        }

        Globals.imageDownloader.downloadImage(URLRequest: request) { response in
            if let image: UIImage = response.result.value {
                callback(image: image)

                Globals.imageCache.addImage(image, forRequest: request)
            } else {
                print(response)
            }
        }
    }
}

ViewController.swift

导入UIKit

class ProfileHeaderController: UIViewController {

    @IBOutlet weak var avatarButton: UIButton!
    @IBOutlet weak var userLabel: UILabel!
    @IBOutlet weak var nameLabel: UILabel!

    private var user = User.current()

    func updateHeader() {
        self.userLabel.text = self.user.username
        self.nameLabel.text = self.user.fullName

        self.user.fetchPhoto { (image) -> Void in
            self.avatarButton.setImage(image, forState: .Normal)
        }
    }
}

1 个答案:

答案 0 :(得分:0)

是的,您需要在Appdelegate中或在调用Parse.setApplicationId之前注册子类

在此文本块中说明:https://parse.com/docs/ios/guide#objects-subclasses

示例:

Appdelegate.swift
....
User.registerSubclass()
Parse.setApplicationId("appid", clientId:"clientid")