从零开始学iOS7开发系列教程-事务管理软件开发实战-Chapter14
!
版权声明:
原及例代码来raywenderlich store中的iOS Apprentice 系列2教程,经过翻译和改编。
版权归原作者所有,本系列教程仅供学习参考使,感兴趣的朋友建议购买原教程(http://
www.raywenderlich.com/store/ios-apprentice)。
!
欢迎继续我们的学习。
!
开发环境:
Xcode 5.1 DP 2 +iOS 7.1 beta2
!
在上章的内容中,我们成功学会了如何将代办事务清单保存到应沙盒的件中。不过只懂得保
存还不够,接下来我们要学习如何加载Checklists.plist件。其实很简单,你只需要将之前做的事情
反过来就可以了。
!
还记得Xcode的那个警告吗?ChecklistItem.m还没有实现NSCoding协议的另外个法
initWithCoder。这个法将于从件中解冻对象。
!
在Xcode中切换到ChecklistItem.m,在encodeWithCoder法之前添加以下法:
!
-(id)initWithCoder:(NSCoder *)aDecoder{
if((self =[super init]))
{
self.text = [aDecoder decodeObjectForKey:@"Text"];
self.checked = [aDecoder decodeBoolForKey:@"Checked"];
}
return self;
}
!
在initWithCoder法中,我们做了和encodeWithCoder法相反的事情。我们从NSCoder的
decoder对象中取出了对象,然后将值保存在ChecklistItem的属性中。好了,就这么简单。之前我
们保存在”Text”这个key下的值将赋予self.text属性,同样的,保存在”Checked”这个key下的值
将赋予self.checked属性。
!
于加载Checklists.plist件的作将由NSKeyedUnarchiver对象完成。unarchiver将在幕后完成下
的作从创建ChecklistItem对象:
!
ChecklistItem *item = [[ChecklistItem alloc] initWithCoder:someDecoderObject];
!
但是当我们动创建ChecklistItem的时候,会下的式:
ChecklistItem *item = [[ChecklistItem alloc] init];
!
!
区别在于NSKeyedUnarchiver不再使常规的init法,使了initWithCoder法。这点其实
我们应该习以为常了。在iOS开发中,对象通常有不个init初始化法。当然,不管怎样,法
的名称总是”initSomething”,这是个命名习惯。于使哪个初始化法则取决于具体的情况。
!