无法在 AppDelegate 应用程序方法的数组中加载 HTTP POST 响应数据。如何解决这个问题?
Posted
技术标签:
【中文标题】无法在 AppDelegate 应用程序方法的数组中加载 HTTP POST 响应数据。如何解决这个问题?【英文标题】:Unable to load HTTP POST response data in array in AppDelegate application method. How to solve this issue? 【发布时间】:2016-01-03 14:54:06 【问题描述】:请在 AppDelegate.swift 中找到以下代码 sn-p 我想要实现的是能够使用我自己的 API 收到的图像 url 填充“图像”数组,并进一步将此图像数组迁移到视图控制器(可以使用委托来完成)。 我确实在“print(self.images [index])”处获得了图像网址列表,但是“images.isEmpty”返回true。我哪里错了?
示例控制台输出: 真的 2016-01-03 19:28:48.767 Mobblr[22372:1347546] Interface Builder 文件中的未知类 ContentViewContr。 此处显示的图片 URL 列表
var images = [String]()
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool
preloadData()
print(images.isEmpty)
var pageControl = UIPageControl.appearance()
pageControl.pageIndicatorTintColor = UIColor.lightGrayColor()
pageControl.currentPageIndicatorTintColor = UIColor.blackColor()
pageControl.backgroundColor = UIColor.whiteColor()
return true
func preloadData()
let parameters = ["count": 100]
Alamofire.request(.POST, <My API>, parameters: parameters, encoding: .JSON)
.responseJSON response in
if let value: AnyObject = response.result.value
let posts = JSON(value)
//print(posts)
for index in 0..<posts.count
//print(posts[index]["image_url"])
if let image = posts[index]["image_url"].string
self.images += [image]
print(self.images[index])
else
self.images += [""]
【问题讨论】:
【参考方案1】:你说“images.isEmpty
返回真”。你在哪里/什么时候检查?
这个请求是异步运行的(它应该是异步运行的,因为你不想在检索图像 URL 时阻止你的应用程序),所以很可能想要使用 images
的视图控制器在请求之前检查已经完成了。所以问题是当images
被成功检索时,你如何通知视图控制器(或任何等待填充images
)。
您可以为此使用通知。因此,responseJSON
完成块可以发布通知:
Alamofire.request(.POST, <My API>, parameters: parameters, encoding: .JSON)
.responseJSON response in
// process the response here
// now post notification
NSNotificationCenter.defaultCenter().postNotificationName(imagesNotificationKey, object: nil)
这假设您有一些全局变量是此通知的关键:
let imagesNotificationKey = "..."
并且任何想要在收到此通知后采取一些行动的视图控制器都可以将自己添加为观察者:
class ViewController: UIViewController
var observer: NSObjectProtocol?
override func viewDidLoad()
super.viewDidLoad()
observer = NSNotificationCenter.defaultCenter().addObserverForName(imagesNotificationKey, object: nil, queue: NSOperationQueue.mainQueue()) notification in
// do something (e.g. reload table or what have you)
deinit
NSNotificationCenter.defaultCenter().removeObserver(observer!)
【讨论】:
以上是关于无法在 AppDelegate 应用程序方法的数组中加载 HTTP POST 响应数据。如何解决这个问题?的主要内容,如果未能解决你的问题,请参考以下文章
无法从 AppDelegate 调用 ViewController 方法
无法在 AppDelegate 中初始化委托,但在类方法中它可以工作
在 AppDelegate 中使用 ViewController 中的数组