Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Swift-使用NSDictionary字符串数据填充数组_Arrays_Json_Swift_Nsdictionary - Fatal编程技术网

Arrays Swift-使用NSDictionary字符串数据填充数组

Arrays Swift-使用NSDictionary字符串数据填充数组,arrays,json,swift,nsdictionary,Arrays,Json,Swift,Nsdictionary,我已经成功地设置了一个从站点提取json数据的会话——它可以工作。但是,当我开始用数据填充数组时,数组并没有填充信息。请帮忙。 这是我的个人课: class Person { var name1 = "name" var info1 = "info" init(name1: String, info1: String) { self.name1 = name1 self.info1 = info1 } } 下面是我的setUp

我已经成功地设置了一个从站点提取json数据的会话——它可以工作。但是,当我开始用数据填充数组时,数组并没有填充信息。请帮忙。 这是我的个人课:

class Person {
    var name1 = "name"
    var info1 = "info"

    init(name1: String, info1: String) {

        self.name1 = name1
        self.info1 = info1
    }
}
下面是我的setUpPerson函数:

func setUpPerson() {
    let url = NSURL(string: "http://www.my-sites-jsondata")

    if url != nil {

        let task = NSURLSession.sharedSession().dataTaskWithURL(url!, completionHandler: { (data, response, error) -> Void in

            let urlError = false

            if error == nil {

                var urlContent = NSString(data: data!, encoding: NSUTF8StringEncoding) as NSString!

                var data: NSData = urlContent.dataUsingEncoding(NSUTF8StringEncoding)!

                do {

                    let jsonObject = try (NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers) as? NSArray)!

                    var index1 = 0

                    while index1 < jsonObject.count {

                        var maindata = (jsonObject[index1] as! NSDictionary)

                        var nameA = maindata["Name"] as! String
                        var infoA = maindata["Info"] as! String

                        var data1 = Person(name1: nameA, info1: infoA)

                        self.arrayOfPersons.append(data1)

                        index1++

                    }

                } catch {

                    print(urlError)
                }

            }

        })

        task.resume()

    }
}
func setUpPerson(){
让url=NSURL(字符串:http://www.my-sites-jsondata")
如果url!=nil{
让task=NSURLSession.sharedSession().dataTaskWithURL(url!,completionHandler:{(数据,响应,错误)->中的Void
设urlError=false
如果错误==nil{
var urlContent=NSString(数据:data!,编码:NSUTF8StringEncoding)作为NSString!
变量数据:NSData=urlContent.dataUsingEncoding(NSUTF8StringEncoding)!
做{
让jsonObject=try(NSJSONSerialization.JSONObjectWithData(数据,选项:NSJSONReadingOptions.MutableContainers)作为?NSArray)!
var index1=0
而index1
我觉得你的代码很好

对我来说,你的
self.arrayOfPersons
也在设置中(我刚刚用我的测试应用程序测试了它)

您可能正在尝试在async
dataTaskWithURL
块中设置之前打印它

异步块在后台执行,因此在主线程上执行块后立即编写的代码,异步块中的代码将尚未完成

对我来说,代码确实执行了。但是,由于异步代码尚未完成执行,因此您没有看到它被设置

在检查新值之前,必须等到异步代码执行之后

您可以这样尝试:

dispatch_async(dispatch_get_main_queue(), ^{
    // Set your data on property here
});

我成功地完成了这个项目。答案有两个方面

  • 我需要
    dispatch\u async(dispatch\u get\u main\u queue()
  • reloadData()

  • 您确定要实例化您的
    arrayOfPersons
    ?如果您的意思是:var arrayOfPersons:[Person]=[Person]()那么,是的,否则我不知道你的意思是的,这就是我想检查的。你确定jsonObject是数组吗?我坚信那是一本字典。你能通过打印它来再次检查一下吗。为什么你要将
    数据
    转换成
    NSString
    ,然后再转换回
    NSData
    ?我想我明白你说的-但我很抱歉不确定如何修复它?请让我知道。您可以尝试在主线程上设置数据,如我在示例中所示。我确定这就是问题所在,但我不确定在代码中的何处放置dispatc_asyncPut only array append行。正如我所说,我用您的代码运行了我的应用程序,效果很好。请尝试一下。我做到了dispatch_async(dispatch_get_main_queue(),{self.arrayOfPersons.append(data1)}),它说我需要添加一个“,”但它一直这样做,并且添加了许多“,”并且没有修复错误