无法更改匿名块中的实例变量(Swift / Parse.com)

时间:2016-01-18 03:11:51

标签: ios swift parse-platform anonymous-function instance-variables

Parse Data是一个PFObject类,包含"公司"我查询的数据。获取数据并将其指定为ParseData对象可以正常工作,但问题是将其放入我的list ivar。从输出中可以看出,匿名块中没有任何ivars发生变化。是否有针对此的解决方法或解决方案?

import Foundation
class AllCompanies: NSObject {
    var list:[ParseData] = []
    var testList:[String] = []
    var testString:String = "butter"

    override init()
    {
        super.init()
        getCompanies()
    }

    func getCompanies()
    {
        let query = ParseData.query()!
        query.findObjectsInBackgroundWithBlock { objects, error in
            if error == nil
            {
                for company in objects!
                {
                    let newCompany:ParseData = ParseData()
                    newCompany.name = company.objectForKey("Name") as! String
                    newCompany.logo = company.objectForKey("Logo") as! PFFile

                    self.list.append(newCompany)
                    self.testList.append("here")
                    self.testString = "no matter"
                }
            }
            else
            {
                print("Error: \(error) \(error?.userInfo)")
            }
        }
    }
}

方法调用:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
Parse.setApplicationId("m0zIvk7nfP6nEUrGYzyecbhRdqTrhbUoBI00fvZ4", clientKey: "lmqPfyrkeq4p8v6cukV7aFCVdi4evb8MFyjgvnEG")
        PFAnalytics.trackAppOpenedWithLaunchOptions(launchOptions)
        let allCompanies = AllCompanies()
        print("\(allCompanies.list)")
        print("\(allCompanies.testList)")
        print("\(allCompanies.testString)")
        return true
}

2 个答案:

答案 0 :(得分:2)

getCompanies方法是异步的吗?确保是否在print方法之前运行findObjectsInBackgroundWithBlock命令。您不能将异步代码编写为同步代码。尝试在self.testString = "no matter"下面写下你的打印代码。祝你好运!

答案 1 :(得分:0)

问题是因为查询是异步的。

您应该将打印行移动到查询回调闭包中。