如何强制异步保存一个常量子类?

时间:2016-02-04 06:05:10

标签: ios swift parse-platform mkannotation pfsubclassing

编辑1:我重新构建了ViewControllers,以便更轻松地完成我想要的工作。

编辑2:我在向代码添加注释时意识到主要内容丢失了,另一个函数会覆盖第一个segue。

这个ViewController是创建注释的地方;从这个视图我需要的是将touchMapCoordinates传输到另一个ViewController,这样我就可以将PFGeoPoint保存在一个数组中。

编辑3 经过长时间的工作来理解正在发生的事情并简化代码,我已经根据Swift- variable not initialized before use (but it's not used)得出了最终的结论,我尝试使用的当前方法将不起作用在任何情况下或由于它异步保存的情况。如果有人知道一项工作,那么你已经正式完成了以前没有做过的事情:)。

出现的错误是

Constant' boi'在初始化之前使用

在Appdata中声明要在项目中的任何位置使用的子类

import Foundation
import Parse
import MapKit

class MyAnnotation: PFObject, PFSubclassing, MKAnnotation {

// MARK: - Properties

@NSManaged var location: PFGeoPoint

// MARK: - Initializers

init(coordinate: CLLocationCoordinate2D) {
    super.init()
    self.location = PFGeoPoint(latitude: coordinate.latitude, longitude: coordinate.longitude)
    print(location)

}

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


    }
}

// MARK: - PFSubclassing protocol

static func parseClassName() -> String {
    return "AnnotationPins"
}

// MARK: - MKAnnotation protocol

var coordinate: CLLocationCoordinate2D {
    return CLLocationCoordinate2DMake(location.latitude, location.longitude)
}

var title:String? ="开始主题"

}

代码将全部异步保存在哪里

   } else {

        let imageData = UIImagePNGRepresentation(self.galleryCameraImage.image!)
        let parseImageFile = PFFile(name: "upload_image.png", data: imageData!)
        let boi : MyAnnotation

        let textTitleandText = PFObject(className: "AnnotationPins")
        textTitleandText["textTopic"] = userTopic.text
        textTitleandText["textInformation"] = userText.text
        textTitleandText["userUploader"] = PFUser.currentUser()
        textTitleandText["imageFile"] = parseImageFile!
        textTitleandText["location"] = boi.location

        textTitleandText.saveInBackgroundWithBlock { (success: Bool, error: NSError?) -> Void in
            if error == nil {

如果有人能提供帮助,我们将非常感激!

2 个答案:

答案 0 :(得分:0)

让我们将您的Location data视为通过segue传输的普通数据。  您可以使用此方法配置将保存位置数据的目标View控制器变量(相同类型)。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
   //check your segue name
   if segue.identifier == "YourSegueIdentifier" {
       let destinationVC = segue.destinationViewController as! YourDestinationViewController
       destinationVC.locationVariableInDestinationVC = locationVariableInCurrentVC 
   }

}

以上是通过segue传递数据的最简单方法,您也可以对位置数据使用相同的方法。

希望有所帮助!!

Update: Based on your updated code

func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {}移出handleLongPress功能。当通过segues发生任何导航时,会自动调用PrepareForSegue函数。

如果您想以编程方式启动segue导航,请为segue分配一个标识符,然后调用self.performSegueWithIdentifier("YourSegueIdentifier", sender: nil)

答案 1 :(得分:0)

如下所示的过度prepareForSegue方法。

override func prepareForSegue(segue: UIStoryboardSegue, sender: 

AnyObject?) {
       if segue.identifier == "SegueID" {
           let destinationVC = segue.destinationViewController as! DestinationViewController  
// Create property in destinationView controller & assign required data from here.
       }
    }

希望它有所帮助。