OC基础学习——如何解析plist文件和数据的归档和解档与json数据的解析

一、plist文件的解析

 

 NSString *path = @"/Users/qf/Desktop/oc课堂练习/Plist文件的新建与解析/Plist文件的新建与解析/Property\ List.plist";

        

        //1.解析plist文件中的内容1.首先看其结构,如果外部结构为字典就用字典来接受它,如果外部是数组就用数组来接受

        

        NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithContentsOfFile:path];

        

        //快速遍历字典中数组(注意快速遍历只能遍历key)

        

        for (NSString *key in dic) {

            

            NSLog(@"%@",[dic objectForKey:key]);

        }

        

        

        //.plist文件中添加内容,注意添加的结构要与其结构相同

        

        NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"3", nil];

        

        //.将数组加入当原来的字典中

        [dic setObject:array forKey:@"pengyue"];

        

        

        // .将字典写入文件中

        [dic writeToFile:path atomically:YES];


二、数据的归档和解档


/*

         数据的归档和解档

         

         1.基本对象的的归档和解档

         2.自定义的对象的归档和解档

         */

        

        //1.数组的归档(其实质就是转为NSData内容)

        NSArray *array = [NSArray arrayWithObjects:@"2",@"3",@"4", nil];

        

     NSData *data =   [NSKeyedArchiver archivedDataWithRootObject:array];

        

        //.解档

        

        NSArray *new = [NSKeyedUnarchiver unarchiveObjectWithData:data];

        

        NSLog(@"%@",new);

        

        

        //2.________对自定义的对象进行归档——————

        /*

         对对象进行归档必须遵循NSCoding协议,并且实现他得方法

- (void)encodeWithCoder:(NSCoder *)aCoder


{

    [aCoder encodeObject:self.name forKey:@"name"];

    

    [aCoder encodeObject:self.age forKey:@"age"];

}

- (id)initWithCoder:(NSCoder *)aDecoder


{

    if(self = [super init]) {

    

        self.name = [aDecoder decodeObjectForKey:@"name"];

        

        self.age = [aDecoder decodeObjectForKey:@"age"];

    }

        

    return self;

}

         */

        

        Person *p1 = [[Person alloc] init];

        

        p1.name = @"yang";

        

        p1.age = [NSNumber numberWithInt:23];

        

        

        Person *p2 = [[Person alloc] init];

        

        p2.name = @"peng";

        p2.age = [NSNumber numberWithInt:20];

        

        

        NSArray *dd = [NSArray arrayWithObjects:p1, p2,nil];

        

        NSData *dota = [NSKeyedArchiver archivedDataWithRootObject:dd];

        

        NSArray *yy = [NSKeyedUnarchiver unarchiveObjectWithData:dota];

        

        NSLog(@"%@",yy);


三、对本地json数据的解析

//1.首先要分析json数据的数据结构,

        

        //1.1首先获取路径

        

        NSString *path = @"/Users/qf/Downloads/day10-2/topic.txt";

        

        //.读取文件内容

        NSData *data = [NSData dataWithContentsOfFile:path];

        

        

        //对其解析

        

        NSMutableArray *array =[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

        

        //.遍历数组

        // 创建一个数组来保存数据对象

        

        NSMutableArray *new = [[NSMutableArray alloc] init];

        

        for (NSMutableDictionary*dic in array) {

            

            //.创建一个对象用来保存字典中的数据

            /* "Name" : "张杰",

             "Pic" : "http://static.damai.cn//812934aa-a7fd-47ef-ab18-6a81d47c8570.jpg",

             "ProjType" : 3,

             "ProjectID" : 90,

             "Url" : ""*/

            

            Contents *content = [[Contents alloc] init];

            

            content.name = [dic objectForKey:@"Name"];

            

            content.pic = [dic objectForKey:@"Pic"];

            

            content.ProjectID = [dic objectForKey:@"ProjectID"];

            

            content.ProjType = [dic objectForKey:@"ProjType"];

            

            content.Url = [dic objectForKey:@"Url"];

            

            [new addObject:content];

        }

        

        

        

        //.遍历对象数组,将其打印

        for (Contents *c in new) {

            NSLog(@"%@",c);

        }





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 iOS Objective-C 中,使用 MulticastSocket 可以实现组播接收和发送数据。 1. 创建 MulticastSocket 对象并加入组播地址: ```objective-c #import <netinet/in.h> #import <arpa/inet.h> NSString *multicastAddress = @"224.0.0.1"; int multicastPort = 8888; struct sockaddr_in addr; memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_addr.s_addr = inet_addr([multicastAddress UTF8String]); addr.sin_port = htons(multicastPort); int fd = socket(AF_INET, SOCK_DGRAM, 0); if (fd > 0) { bind(fd, (struct sockaddr *)&addr, sizeof(addr)); struct ip_mreq mreq; mreq.imr_multiaddr.s_addr = inet_addr([multicastAddress UTF8String]); mreq.imr_interface.s_addr = htonl(INADDR_ANY); setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)); } ``` 2. 接收数据: ```objective-c char buf[1024]; socklen_t addrlen = sizeof(addr); int len = recvfrom(fd, buf, sizeof(buf), 0, (struct sockaddr *)&addr, &addrlen); if (len > 0) { NSString *msg = [[NSString alloc] initWithBytes:buf length:len encoding:NSUTF8StringEncoding]; NSLog(@"Received Data: %@", msg); } ``` 3. 发送数据: ```objective-c NSString *msg = @"Hello, World!"; const char *data = [msg UTF8String]; sendto(fd, data, strlen(data), 0, (struct sockaddr *)&addr, sizeof(addr)); ``` 需要注意的是,在接收数据时需要先调用 `bind` 绑定端口,然后再加入组播地址。另外,在发送数据时也需要指定组播地址和端口。 同时,也需要在项目的 Info.plist 文件中添加一个权限请求: ```xml <key>NSMulticastNetworkingUsageDescription</key> <string>使用组播接收和发送数据</string> ``` 这样就可以在 iOS Objective-C 中使用 MulticastSocket 实现组播接收和发送数据了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值