1

Parse Data - это класс PFObject, содержащий данные «Компании», которые я запрашиваю. Получение данных и назначение их как объекта ParseData прекрасно работает, но проблема заключается в том, чтобы вставить его в мой list ivar. Как видно из вывода, ни один из иваров не меняется в анонимном блоке. Есть ли обходной путь или решение для этого?Невозможно изменить переменные экземпляра в анонимном блоке (Swift/Parse.com)

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 
} 
+0

Это лучше с кодом в вопросе, чем с скриншотами. Кроме того, вы действительно проверили ваши петли для всего цикла? – pvg

+0

Цикл работает. Извините, я изменю это – stumped

ответ

2

getCompanies метод асинхронный? вы убедитесь, что запустите команду print до findObjectsInBackgroundWithBlock. Вы не можете записать свой асинхронный код в виде синхронизированного кода. попробуйте написать свой код печати ниже self.testString = "no matter". Удачи!

0

Проблема в том, что запрос является асинхронным.

вы должны перенести свою линию печати в закрытие обратного вызова запроса.

Смежные вопросы