2016-01-12 45 views
0

我正在学习使用外部数据库,我使用mysql + php。数据结构非常简单。我只有1个表格“发布”,具有4个属性:标识,标题,作者和内容。然后我试图从在线视频使用NSArray和NSDictionary:无法将类型“字符串”的值转换为预期的参数类型“int”

学习,如果我复制了确切的代码,它可以成功地建立,后来就传来了错误信息

“无法投类型的值‘__NSArrayM’(0x882178)到 'NSDictionary'(0x882394)。“

let response = try! NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary". 

编码所以我在编码改变了NSDictionaryNSArray,那么它出来另一个错误的另一种编码,甚至无法成功建立。

self.loadPosts(response["posts"] as! NSArray) 

现在我也不做什么和编码“无法转换类型“字符串的值”,以期望的参数‘INT’

请帮帮我。

这些都是编码后service.swift

import Foundation 

class PostService { 
    var settings:Settings 

    init() { 
    self.settings = Settings() 

    } 

    func getPosts(callback:(NSArray) ->()){ 

     request(settings.viewPosts, callback: callback) 
    } 

    func request(url:String, callback:(NSArray) ->()){ 

     let nsURL = NSURL(string: url) 

     let task = NSURLSession.sharedSession().dataTaskWithURL(nsURL!) 
      {(data,response,error) in 

       let _: NSError 

       let response = try! NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! NSArray 
       callback (response) 
     } 

     task.resume() 
     } 
} 

下面的代码是在masterviewcontroller.swift

var detailViewController: DetailViewController? = nil 
var postsCollection = [Post]() 
var service:PostService! 


override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    self.navigationItem.leftBarButtonItem = self.editButtonItem() 

    let addButton = UIBarButtonItem(barButtonSystemItem: .Add, target: self, action: "insertNewObject:") 
    self.navigationItem.rightBarButtonItem = addButton 
    if let split = self.splitViewController { 
     let controllers = split.viewControllers 
     self.detailViewController = (controllers[controllers.count-1] as! UINavigationController).topViewController as? DetailViewController 
    } 
    service = PostService() 
    service.getPosts{ 
     (response) in 
     self.loadPosts(response["posts"] as! NSArray) 
    } 


} 

// func loadPosts 
func loadPosts (posts:NSArray){ 

    for post in posts { 
     let id = post["Post"]!!["id"] as! String 
     let title = post["Post"]!!["title"] as! String 
     let author = post["Post"]!!["author"] as! String 
     let content = post["Post"]!!["content"] as! String 
     let postObj = Post(id: id, title: title, author: author, content: content) 
     postsCollection.append(postObj) 
     dispatch_async(dispatch_get_main_queue()){ 
      self.tableView.reloadData() 
     } 


    } 

} 

回答

0

我找到了解决方案。 我刚刚改变self.loadPosts(响应[“职位”]作为NSArray)以下,它的作品。

self.loadPosts(response)

相关问题