Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.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
Ios 从NSArray中提取数据_Ios_Json_Swift_Nsarray - Fatal编程技术网

Ios 从NSArray中提取数据

Ios 从NSArray中提取数据,ios,json,swift,nsarray,Ios,Json,Swift,Nsarray,我的php脚本向我的swift iOS应用程序发送JSON响应,格式如下所示。使用以下代码将其解析为NSArray: 让jsonArray=试试NSJSONSerialization.JSONObjectWithData(数据已修复,选项:[]) 我已在swift代码中创建了以下对象: class Friend : NSObject { var name: String? var id: String? var profile_pic : String? } class Message

我的php脚本向我的swift iOS应用程序发送JSON响应,格式如下所示。使用以下代码将其解析为
NSArray

让jsonArray=试试NSJSONSerialization.JSONObjectWithData(数据已修复,选项:[])

我已在swift代码中创建了以下对象:

class Friend : NSObject {
var name: String?
var id: String?
var profile_pic : String?


}


class Message : NSObject {
var id: String?
var text: String?
var date: NSDate?
var sender: Friend?
}

class Chat : NSObject {
var id : String?
var chat_partner : Friend?
var chat_messages : [Message]?
}
我现在要做的是循环遍历下面的
NSArray
,并将数据提取到我的对象实例中,因此简单地说,通过下面的示例,我想创建两个id为1和2的聊天对象,以及所有适当的变量。我不知道如何在swift中正确执行这样的循环

JSON响应:

Array: (
    {
    chatId = 1;
    message =         {
        1 =             {
            chatId = 1;
            "message_id" = 24242241;
            sender = 1233;
            text = "hello i am";
            timestamp = "2016-05-24 17:13:08";
        };
        2 =             {
            chatId = 1;
            "message_id" = 421421;
            sender = 1233;
            text = great;
            timestamp = "2016-05-24 17:15:08";
        };
    };
    "user1_id" = 1233;
    "user1_name" = David;
    "user1_profile_pic" = "http://graph.facebsddsaadsadsook.com/1233/picture?type=large";
    "user2_id" = 8543211123;
    "user2_name" = 0;
    "user2_profile_pic" = "<null>";
},
    {
    chatId = 2;
    "user1_id" = 23413524635;
    "user1_name" = 0;
    "user1_profile_pic" = "<null>";
    "user2_id" = 1233;
    "user2_name" = David;
    "user2_profile_pic" = "http://graph.facebsdadsook.com/1233/picture?type=large";
}
)
数组:(
{
chatId=1;
消息={
1 =             {
chatId=1;
“消息id”=242241;
发送方=1233;
text=“你好,我是”;
timestamp=“2016-05-2417:13:08”;
};
2 =             {
chatId=1;
“消息id”=421421;
发送方=1233;
文字=伟大;
timestamp=“2016-05-2417:15:08”;
};
};
“用户1_id”=1233;
“user1_name”=David;
“用户1_配置文件_图片”=”http://graph.facebsddsaadsadsook.com/1233/picture?type=large";
“用户2_id”=8543211123;
“user2_name”=0;
“user2_profile_pic=”;
},
{
chatId=2;
“用户1_id”=23413524635;
“user1_name”=0;
“user1_profile_pic”=”;
“用户2_id”=1233;
“user2_name”=大卫;
“用户2_配置文件_图片”=”http://graph.facebsdadsook.com/1233/picture?type=large";
}
)
更新:代码尝试

                        var count_chats = 0;
                       for anItem in jsonArray as! [Dictionary<String, AnyObject>] {
                            let curr_chat = Chat()
                            if let chatId = anItem["chatId"] as? String {
                                curr_chat.id = chatId
                            }
                            let friend = Friend()
                            let user1id = anItem["user1_id"] as! String
                            let user2id = anItem["user2_id"] as! String
                            if (user1id == userID) {
                                if let user2id = anItem["user2_id"] as? String {
                                    friend.id = user2id
                                }
                                if let user2name = anItem["user2_name"] as? String {
                                    friend.name = user2name
                                }
                                if let user2profilepic = anItem["user2_profile_pic"] as? String {
                                    friend.profile_pic = user2profilepic
                                }
                            }
                            else if (user2id == userID){
                                if let user1id = anItem["user1_id"] as? String {
                                    friend.id = user1id
                                }
                                if let user1name = anItem["user1_name"] as? String {
                                    friend.name = user1name
                                }
                                if let user1profilepic = anItem["user1_profile_pic"] as? String {
                                    friend.profile_pic = user1profilepic
                                }
                        }
                            print("passed")
                                curr_chat.chat_partner = friend


                            var chat_messages : [Message]? = nil
                            var count_messages = 0;
                            if let dataArray = anItem["message"] as? NSArray {
                                for onemessage in dataArray as! [Dictionary<String, AnyObject>] {
                                    let curr_message = Message()
                                    if let messageid = onemessage["message_id"] as? String {
                                        curr_message.id =  messageid
                                    }
                                    if let messagedate = onemessage["timestamp"] as? NSDate {
                                        curr_message.date = messagedate
                                    }
                                    if let messagesender = onemessage["sender"] as? String {
                                        curr_message.sender = messagesender
                                    }
                                    if let messagetext = onemessage["text"] as? String {
                                        curr_message.text = messagetext
                                    }
                                    chat_messages![count_messages] = curr_message
                                    count_messages = count_messages + 1
                                }
                            }

                            curr_chat.chat_messages = chat_messages
                            self.user_chats![count_chats] = curr_chat
                            count_chats = count_chats + 1
var count\u chats=0;
对于jsonArray中的anItem as![字典]{
让curr_chat=chat()
如果让chatId=anItem[“chatId”]作为字符串{
curr\u chat.id=chatId
}
让朋友=朋友
让user1id=anItem[“user1\u id”]作为!字符串
让user2id=anItem[“user2_id”]作为!字符串
if(user1id==userID){
如果让user2id=anItem[“user2_id”]作为字符串{
friend.id=user2id
}
如果让user2name=anItem[“user2_name”]作为字符串{
friend.name=user2name
}
如果让user2profilepic=anItem[“user2\u profile\u pic”]作为?字符串{
friend.profile\u pic=user2profilepic
}
}
else if(user2id==userID){
如果让user1id=anItem[“user1\u id”]作为字符串{
friend.id=user1id
}
如果让user1name=anItem[“user1_name”]作为字符串{
friend.name=user1name
}
如果让user1profilepic=anItem[“user1\u profile\u pic”]作为字符串{
friend.profile\u pic=user1profilepic
}
}
打印(“通过”)
curr\u chat.chat\u partner=朋友
var chat_messages:[消息]?=nil
var count_messages=0;
如果让dataArray=anItem[“message”]作为NSArray{
用于dataArray中的onemessage as![字典]{
让curr_message=message()
如果让messageid=onemessage[“message_id”]作为?字符串{
curr_message.id=messageid
}
如果让messagedate=onemessage[“timestamp”]作为?NSDate{
curr_message.date=messagedate
}
如果让messagesender=onemessage[“sender”]作为?字符串{
curr_message.sender=messagesender
}
如果让messagetext=onemessage[“text”]作为字符串{
curr_message.text=messagetext
}
聊天信息![count\u messages]=当前信息
count_messages=count_messages+1
}
}
curr\u chat.chat\u messages=聊天信息
self.user\u chats![count\u chats]=curr\u chat
count\u chats=count\u chats+1

不是答案,但这可能会对您有所帮助,在编写类似以下内容时,您应该检查您的属性是否为零:
curr\u message.id=onemessage[“chatId”]as!String
。 您可以做什么:

if let chatId = onemessage["chatId"] as? String {
   curr_message.id = chatId
}
或者,如果您希望它更简单,您可以使用和编写以下内容:

curr\u message.id=onemessage[“chatId”]。stringValue


希望这能对你有所帮助!

我真的不知道这是否真的能帮助到某人,但我已经被这封邮件屏蔽了3天。我终于看到了这个问题,这个问题就是我的答案,感谢@Alk。简而言之,我在处理这类数据(NSArray):


所以试试看,JSON中的数据将以type
AnyObject
的形式输入。您需要将其转换为type[NSDictionary]。
[<__NSArrayM 0x6000000556e0>(
{
    author = Julioenred;
    id = 1;
    text = "hello world";
},
{
    author = Pepe;
    text = "Saludos!!";
}
)
]
for i in data.first as! [Dictionary<String, AnyObject>] {
    let message = Message(message: "", user: "")
    if let author = i["author"] as? String {
       message.author = author
    }
    if let text = i["text"] as? String {
       message.text = text
    }
 }

import Foundation

class Message: Mappable {
    var author: String? = ""
    var text: String? = ""
    
    init(message: String, user: String) {
        self.author = user
        self.text = message
    }
}