首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift中的PFQuery

Swift中的PFQuery
EN

Stack Overflow用户
提问于 2015-09-15 02:22:34
回答 2查看 1.6K关注 0票数 2

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

代码语言:javascript
复制
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版本。

代码语言:javascript
复制
- (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]);
        }
    }];

}
EN

回答 2

Stack Overflow用户

发布于 2015-09-15 02:41:50

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

像这样初始化你的数组:

代码语言:javascript
复制
var array: [PFObject] = []

在调用find方法时,请尝试执行以下操作:

代码语言:javascript
复制
            query.findObjectsInBackgroundWithBlock {
                (objects, error) -> Void in
                if (error == nil) {
                    self.array.extend(objects as! [PFObject])
                    println(self.array)
                }else {
                    println(error?.userInfo)
                }
            }
票数 0
EN

Stack Overflow用户

发布于 2015-09-15 06:05:43

尝试获取键的值,然后再将其添加为对象...

代码语言:javascript
复制
let cityTitle = object.valueForKey("City") as! String
self.cities.addObject(cityTitle)

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32571436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档