继续Get News List
拿到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 的设计人员估计也是醉了。
随机推荐
- 17.1---编写一个函数交换两个变量的值(CC150)
用^来操作: public static int[] exchangeAB(int[] AB){ AB[0] = AB[0] ^ AB[1]; AB[1] = AB[0] ^ AB[1]; AB[0] ...
- hadoop学习过程中一系列问题
12---修改host .修改主机名5.1 修改当前会话的主机名sudo hostname SY-0217查看当前会话的主机名hostname默认是我装Linux 虚机时输入的名字Ubuntu5.2 ...
- centos 安装gcc时,出错:Found 10 pre-existing rpmdb problem(s), 'yum check' output follows:
别人折腾的系统. 刚开始,准备安装下tornado,报错,需要安装 gcc 和 python-devel gcc安装报错,如标题所示: 谷歌了一把: http://stackoverflow.com/ ...
- linux系统vsftpd登陆慢卡怎么办
linux系统vsftpd登陆慢卡怎么办 浏览:145 | 更新:2013-12-31 00:50 vsftpd是linux系统中的一款ftp软件,用它可以实现文件,数据上传与下载,但有些用户会发现v ...
- JAVA分布式事务原理及应用(转)
JTA(Java Transaction API)允许应用程序执行分布式事务处理--在两个或多个网络计算机资源上访问并且更新数据. JDBC驱动程序的JTA支持极大地增强了数据访问能力. 本文的目 ...
- Java程序优化的一些最佳实践(转)
衡量程序的标准 衡量一个程序是否优质,可以从多个角度进行分析.其中,最常见的衡量标准是程序的时间复杂度.空间复杂度,以及代码的可读性.可扩展性.针对程序的时间复杂度和空间复杂度,想要优化程序代码,需要 ...
- c++从文件中读取特定字符串问题的总结
1.每次从文件中读出一行作为一个字符串 可以用ifstream()函数来打开一个文件,然后用while加getline()函数即可每次读一行文件,直到文件结束 #include<unistd.h ...
- window.location.href url含中文服务器收到乱码问题解决
中文乱码问题 window.location.href url含中文服务器收到乱码问题解决 (1).页面中先对中文进行编码. 如:window.location.href = url+"&a ...
- [C#]Datatable和json互相转换操作
#region DataTable 转换为Json字符串实例方法 /// <summary> /// GetClassTypeJosn 的摘要说明 /// </summary> ...
- function与感叹号
原文链接:https://swordair.com/function-and-exclamation-mark/ 最近有空可以让我静下心来看看各种代码,function与感叹号的频繁出现,让我回想起2 ...