【问题标题】:PFQuery in SwiftSwift 中的 PFQuery
【发布时间】:2015-09-14 18:22:33
【问题描述】:

我正在尝试使用 Swift 将 Parse 中的字符串对象添加到数组中。添加对象后数组为空,因此显然没有添加任何内容。怎么了?

var cities = NSMutableArray()

func retrieveCities() {
    let cityQuery:PFQuery = PFQuery(className: "Locations")
    cityQuery.limit = 1000
    cityQuery.orderByAscending("City")
    cityQuery.findObjectsInBackgroundWithBlock {
        (objects:[AnyObject]?, error:NSError?) -> Void in

        if error == nil {
            if let objects = objects as? [PFObject] {
                for object in objects {
                    self.cities.addObject(object["City"] as! String)
                }
            }

            NSLog("Cities: %@", self.cities)

            dispatch_async(dispatch_get_main_queue()) {
                self.tableView.reloadData()
                self.loadingIndicator.stopAnimating()
            }
        } else {       
        }
    }
}

这是我的 Objective-c 版本。

- (void)retrieveCities {
    self.cities = [[NSMutableArray alloc]init];

    PFQuery *cityQuery = [PFQuery queryWithClassName:@"Locations"];
    [cityQuery setLimit:1000];
    [cityQuery orderByAscending:@"City"];
    [cityQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
        if (!error) {
            for (NSDictionary *objectDictionary in objects) {
                [self.cities addObject:[objectDictionary objectForKey:@"City"]];
            }

            // Reload the table data and dismiss the loading indicator
            dispatch_async(dispatch_get_main_queue(), ^ {
                [self.tableView reloadData];
                [self.loadingIndicator stopAnimating];
            });
        } else {
            NSLog(@"Error: %@ %@", error, [error userInfo]);
        }
    }];

}

【问题讨论】:

  • 我想知道查询是否真的返回任何东西或只是一个空数组。

标签: ios swift parse-platform pfquery


【解决方案1】:

避免在异步方法下进行迭代。尝试使用.extend

像这样初始化你的数组:

var array: [PFObject] = []

当调用 find 方法时,请尝试以下操作:

            query.findObjectsInBackgroundWithBlock {
                (objects, error) -> Void in
                if (error == nil) {
                    self.array.extend(objects as! [PFObject])
                    println(self.array)
                }else {
                    println(error?.userInfo)
                }
            }

【讨论】:

  • 这样尝试时数组还是空的。
  • 查询返回的“对象”是否包含正确的数据?
【解决方案2】:

在将键添加为对象之前尝试获取键的值...

let cityTitle = object.valueForKey("City") as! String
self.cities.addObject(cityTitle)

如果这不起作用,请为您的for loop 中的每个对象运行println,以确保这些对象确实存在。

【讨论】:

  • 看起来没有任何东西可以填充数组。不知道为什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多