拿到news list 所需要的技能

  • json数组反序列化
  • iOS中有哪些集合对象
  • 数组的遍历
  • Debugging with GDB

json数组反序列化

id jsonObject = [NSJSONSerialization
                         JSONObjectWithData:data
                         options:NSJSONReadingAllowFragments

                         error:&error];
        if([jsonObject isKindOfClass:[NSArray class]])
        {
            NSArray *newsArray = (NSArray *)jsonObject;
            for (int i=0; i<[newsArray count]; i++) {
                id newsOjbect = newsArray[i];

                if([newsOjbect isKindOfClass:[NSDictionary class]])
                {
                    NSDictionary *deserializedDictionary = (NSDictionary *)newsOjbect;
                    News *news = [[News alloc]init];

                    [_newsList addObject:news];

                    if([deserializedDictionary objectForKey:@"Title"])
                    {
                        news.title=[deserializedDictionary objectForKey:@"Title"];
                    }
                    if([deserializedDictionary objectForKey:@"SubTitle"])
                    {
                        news.subTitle=[deserializedDictionary objectForKey:@"SubTitle"];
                    }
                }
            }
        }

iOS中有哪些集合对象

Array Objects

对象的有序集合,NSArray,NSMutableArray

{
    NSArfray *monthNames =[NSArray arrayWithObjects:@"January",@"Februay",@"March",nil];

    for(int i=0;i<12;i++)
    {
        NSLog (@"%@",[monthNames objectAtIndex : i]);
    }
}

当然,我们也有语法糖,

{
    NSArray *monthNames = @[@"Januar",@"February",@"March"];
    for(int i=0;i<12;i++)
    {
        NSLog(@"%@",monthNames[i]);
    }
}

@autoreleasepool
{
    NSMutableArray *numbers = [NUMutableArray array];
    for (i = 0; i<10; i++)
    {
        numbers[i] = @(i);
    }
}

Debugging with GDB

See here apple

Making an Address Book

Address Book 是address cards 的集合

Creat an Address Card

@interface AddressCard : NSObject

-(void) setName: (NSString *) theName;
-(void) setEmail: (NSString *) theEmail;

-(NSString *) name;
_(NSString *) email;

-(void) print;

@end;

-(void) setName: (NSString *) theName{
    name = [NSString stringWithString : theName];
}

@autoreleasepool{
    AddressCard *card1 = [AddressCard alloc]init];
}

当然,我们还是喜欢语法糖

@synthesize name,email;

The AddressBook Class

@interfact AddressBook : NSObject

-(instancetype) initWithName: (NSString *)name;

@end;

使用instancetype而不是id来作为构造函数或者工厂方法的返回值。当然,我原来是直接使用当前对象类型的。返回id谁都知道不太安全。

使用copy 和 strong 的简单的区别,一般来说我们操作的都是NSString, 两者无差。正常人也不太会用上NSMutableString, 用上时候该注意这两者的区别。

init

-(instancetype) initWithName: (NSString *)name
{
    self = [super init];
    if(self)
    {
        bookName = name;
        book = [NSMutableArray array];
    }

    return self;
}

-(instancetype) init
{
    return [self initWithName:@"NoName"];
}

遍历数组

-(void) list
{
    for(AddressCard *theCard in book)
        {
            .....
        }
}

有了这个基础,我们就可以改造上面的dirty code了。

 NSArray *newsArray = (NSArray *)jsonObject;

        for(NSDictionary *newsDictory in newsArray)
        {
            News *news = [[News alloc]init];

            [_newsList addObject:news];

            if([newsDictory objectForKey:@"Title"])
            {
                news.title=[newsDictory objectForKey:@"Title"];
            }
            if([newsDictory objectForKey:@"SubTitle"])
            {
                news.subTitle=[newsDictory objectForKey:@"SubTitle"];
            }
        }

NSValue

大家都懂的装箱和拆箱,这个是各种值类型都装到里面去。NSNumber 用来装数字,当然这个显然是NSValue 的子类。

字典的语法糖

if([newsDictory objectForKey:@"Title"])
            {
                news.title=[newsDictory objectForKey:@"Title"];
            }
            if([newsDictory objectForKey:@"SubTitle"])
            {
                news.subTitle=[newsDictory objectForKey:@"SubTitle"];
            }

我们改成

for(NSDictionary *newsDictory in newsArray)
        {
            News *news = [[News alloc]init];
            news.title =newsDictory[@"Title"];
            news.subTitle = newsDictory[@"SubTitle"];

            [_newsList addObject:news];
        }

断点的删除

前一阵子一直找不到如何快速删除断点,原来是可以直接拖拉去掉的。xcode 的设计人员估计也是醉了。

随机推荐

  1. 17.1---编写一个函数交换两个变量的值(CC150)

    用^来操作: public static int[] exchangeAB(int[] AB){ AB[0] = AB[0] ^ AB[1]; AB[1] = AB[0] ^ AB[1]; AB[0] ...

  2. hadoop学习过程中一系列问题

    12---修改host .修改主机名5.1 修改当前会话的主机名sudo hostname SY-0217查看当前会话的主机名hostname默认是我装Linux 虚机时输入的名字Ubuntu5.2 ...

  3. centos 安装gcc时,出错:Found 10 pre-existing rpmdb problem(s), 'yum check' output follows:

    别人折腾的系统. 刚开始,准备安装下tornado,报错,需要安装 gcc 和 python-devel gcc安装报错,如标题所示: 谷歌了一把: http://stackoverflow.com/ ...

  4. linux系统vsftpd登陆慢卡怎么办

    linux系统vsftpd登陆慢卡怎么办 浏览:145 | 更新:2013-12-31 00:50 vsftpd是linux系统中的一款ftp软件,用它可以实现文件,数据上传与下载,但有些用户会发现v ...

  5. JAVA分布式事务原理及应用(转)

      JTA(Java Transaction API)允许应用程序执行分布式事务处理--在两个或多个网络计算机资源上访问并且更新数据. JDBC驱动程序的JTA支持极大地增强了数据访问能力. 本文的目 ...

  6. Java程序优化的一些最佳实践(转)

    衡量程序的标准 衡量一个程序是否优质,可以从多个角度进行分析.其中,最常见的衡量标准是程序的时间复杂度.空间复杂度,以及代码的可读性.可扩展性.针对程序的时间复杂度和空间复杂度,想要优化程序代码,需要 ...

  7. c++从文件中读取特定字符串问题的总结

    1.每次从文件中读出一行作为一个字符串 可以用ifstream()函数来打开一个文件,然后用while加getline()函数即可每次读一行文件,直到文件结束 #include<unistd.h ...

  8. window.location.href url含中文服务器收到乱码问题解决

    中文乱码问题 window.location.href url含中文服务器收到乱码问题解决 (1).页面中先对中文进行编码. 如:window.location.href = url+"&a ...

  9. [C#]Datatable和json互相转换操作

    #region DataTable 转换为Json字符串实例方法 /// <summary> /// GetClassTypeJosn 的摘要说明 /// </summary> ...

  10. function与感叹号

    原文链接:https://swordair.com/function-and-exclamation-mark/ 最近有空可以让我静下心来看看各种代码,function与感叹号的频繁出现,让我回想起2 ...