多个Alamofire请求

时间:2014-12-15 17:15:58

标签: swift xcode6 alamofire

我正在构建一个应用程序,列出所有用户Instagram关注者。 Instagram API仅返回约50个粉丝作为JSON数组,并链接到下一个50,依此类推,直到所有粉丝都被发送。这种方法称为分页。

我要做的是以下内容

  1. 使用主API URl发起请求
  2. 将所有发送的数据附加到JSON数组
  3. 重新发送请求,但将URL设置为分页URL(将列出接下来的50个粉丝)
  4. 将新发送的关注者附加到JSON数组
  5. 继续这样做,直到下一个50的网址为空(没有更多关注者)
  6. <小时/>

    我正在使用Swift 1.2,Xcode 6.4,Alamofire最新版本,SwiftyJSON最新版本

    这是我使用的代码

    do {
    
    Alamofire.request(.GET, dataURL).responseJSON { (request, response, json, error) in
    
        print("Request Started")
    
        if json == nil || error != nil {
    
    
    
            let alertView = UIAlertController(title: "Error", message: "No Data found. Check your internet connection", preferredStyle: .Alert)
            alertView.addAction(UIAlertAction(title: "Dismiss", style: .Default, handler: nil))
            self.presentViewController(alertView, animated: true, completion: nil)
            return
        }else{
    
            var jsonObject = JSON(json!)
    
            var dataOfNextURl = jsonObject["pagination"]["next_url"].string!
            print(" Data for next url :\(dataOfNextURl)")
            dataURL = dataOfNextURl
    
    
    
        }
    
    
    
    
    }
    }while(dataURL != "")
    

    在控制台中我得到了无尽的“Request Started”打印(无限循环,没有启动请求并等待响应),但我没有得到print(" Data for next url :(dataOfNextURl)")执行的。我猜Alamofire的设计目的是为了降低复杂性而在另一个线程上运行,但如果我单独发出一个没有while循环的请求,它就会按照假设运行(在执行后面的代码之前等待响应)。

    <小时/> 那我该怎么做呢?在迭代循环之前,让alamofire等待每个响应。 感谢

2 个答案:

答案 0 :(得分:3)

NSUserDefaults为此目的使用registerDefaults:方法。使用它(在application:didFinishLaunchingWithOptions:中)。

答案 1 :(得分:1)

正如亚特所说,registerDefaults是为此目的而创建的。

但是,如果您不想使用registerDefaults,那么我建议您使用integerForKeysetInteger而不是objectForKeyintegerForKey默认为0.因此,如果您使用它,HighScore将默认为0,直到设置为止。