InnerBand 库旨在通过一系列类、宏、组件和常量来补充日常 iPhone 开发,从而加快开发速度,而又不会在任何方面抽象 SDK。
刚开始使用 Three20 时,我对它的大部分方面都爱不释手,包括新的表格架构、CSS 和基于 URL 的导航系统。我感觉 iPhone SDK 中丑陋的部分已经被抽象化了,我不再需要担心实现 12 个钩子方法来制作一个表格。生活真美好!
当我使用它完成了第三个项目后,我想我已经够了。以下是那段时间我遇到的一些问题:
这并不是说 Three20 中没有很多不错的东西。一些这些问题可以通过更深入的了解避免,但质量较差、更新不及时的文档并不适合使用它的开发者。
这就是为什么有 InnerBand 的原因!
使用 InnerBand,您将获得对您一直使用的常规 SDK 的增强。以下是一些您将发现的内容的快速总结:
InnerBand不修改UI层。需要一个按钮吗?使用IBButton创建一个光泽按钮仅需一行代码!
需要一些富文本?不要自己包裹UIWebView,你需要记住这么多属性来设置。试试IBHTMLLabel,它可以像UILabel一样简单使用。或者选择IBCoreTextLabel,使用HTML语法显示文本,而不需要重量级的UIWebView!
关于改进UIAlertView有什么看法?为什么要在多个警报和将处理代码放在远离调用警报的地方烦恼自己?基于块的警报方法很管用。以下是它的最简单形式
[IBAlertView showAlertWithTitle:@"Title" message:@"My message." cancelTitle:@"Cancel" okTitle:@"OK" cancelBlock:^{ NSLog(@"CANCEL CLICKED!"); } okBlock:^{ NSLog(@"OK CLICKED!"); }];
实际上,由于这种情况很常见,你甚至可以这样写
[IBAlertView showOKCancelWithTitle:@"Title" message:@"My message." cancelBlock:^{ NSLog(@"CANCEL CLICKED!"); } okBlock:^{ NSLog(@"OK CLICKED!"); }];
简单到足够吗? :-) 还有IBActionSheet呢!
消息中心在各个方面都改进了NSNotificationCenter。如果你想要一个紧凑、本质上简单的系统,那么消息中心也远远超出了预期。
通过传递通知(IBDispatchMessage),你可以使用干净的API提醒组件关注应用程序中的重大事件
[IBMessageCenter sendGlobalMessageNamed:COOKIES_ARE_READY];
将数据与通知打包同样容易
[IBMessageCenter sendGlobalMessageNamed:COOKIE_READY withUserInfoKey:@"cookie" andValue:cookie];
但是,IBDispatchMessage比这更强大。每条消息都可以支持内部执行,这允许你在分发之前运行代码。例如,你可以创建一个带有URL(以及可选参数)的HTTPGetRequestMessage并发送它,但异步URL请求将被发出,只有在完成时才会分发消息。接收者都会在收到消息时访问输出!
我们还可以更进一步。IBDispatchMessage对象可以在IBSequencedMessage中按顺序排列,将它们的输入和输出相互连接,以便在所有执行完成后,分发最终输出。将你的IBHTTPGetRequestMessage与JSONMessage连锁使用,以便所有接收者在请求完成后解析到JSON结构!
核心数据是一个不错的API,但是执行任何事情都需要大量的样板代码。即使是Apple也将大量此类代码放在你的AppDelegate中!
有一个更好的解决方案。
像往常一样开始一个项目——不要选择核心数据复选框,这样就不会添加任何讨厌的代码到你的项目中。导入InnerBand,现在核心数据就绪了!只需创建一个新的核心数据模型。
IBCoreDataStore为你提供了使用方法来轻松访问数据,而无需在周围留下这些糟糕的代码。例如,allForEntity、entityByName、removeEntity、removeAllEntitiesByName和(我最喜欢的方法)clearAllData等方法,使使用核心数据成为一个愉悦的体验!但这还不是全部...
推荐使用这些方法的新方法是使用NSManagedObject的类别。例如,如果你生成了一个名为Widget的核心数据类,你现在可以调用[Widget create]或[Widget all]来创建或访问它们。这是更好的方法,因为它可以由编译器检查,但它确实要求你生成与实体相同名称的类。
现在,它也是线程安全的!在你的线程上创建一个私有的IBCoreDataStore,使用[IBCoreDataStore createStore]。如果你在主线程上,你可以使用单例[IBCoreDataStore mainStore]来访问。记住,你的NSManagedObject类不能在不同线程之间传递!
InnerBand通过类别辅助你喜欢的许多Cocoa类,以便更有效地使用它们!它们不会打扰你的正常开发实践。使用它们或不使用它们。有了它们,你将能够做很多酷的事情!
使用[UIColor colorWithHexString:@"#ff3344"]创建一个像网络开发者一样的颜色。
使用简单的办法对字符串数组进行不区分大小写和变音符号的排序
[myArray sortedArrayAsDiacriticInsensitiveCaseInsensitive].
(变音符号是你看到的词末波浪线或点,例如Peña或naïve。)
此外,还有许多针对NSArray和NSMutableArray的新方法来管理栈和队列。或者,您可以尝试使用基于块的方法,如deleteIf和map来简化数组的重新生成。
使用您的UIView上的便捷属性。是否需要按钮的高度?myButton.height。想要向下移动?myButton.top += 20。
更喜欢使用协调世界时(UTC)而不是本地时间?创建一个NSDate,您可以使用myDate.utcHour和myDate.utcDay等属性。
还有更多内容!查看单元测试并找到您最喜欢的...
函数可以大大节省时间!InnerBand包含了众多可供选择的功能!
使用IB_BOX_INT(5)将基元整数boxed为一个NSNumber,以IB_UNBOX_INT(myNumber)将其unbox。
使用IB_RECT_INSET_BY_LEFT_TOP_RIGHT_BOTTOM(myRect, 50, 10, 5, 10)修改矩形。
使用IB_IS_EMPTY_STRING(myStringOrObject)和IB_IS_POPULATED_STRING(myStringOrObject)验证字符串。
还有很多...
有两种简单的方法可以将InnerBand集成到您的应用程序中
将InnerBand源代码复制到您的项目中是最灵活的方式,这允许您在无需重新构建库的情况下更新XCode,但您在after a clean之后需要重新编译它。尽管如此,这是iPhone开发者对第三方库常用的最常见方法。
下载InnerBand源代码包(http://github.com/ZaBlanc/InnerBand/downloads)或使用以下命令克隆仓库:
git clone [email protected]:ZaBlanc/InnerBand.git
如果您还没有,创建一个新的XCode iPhone项目。
打开InnerBand子目录,将InnerBand/目录复制到您的项目中。您可以选择手动复制并选择“添加现有文件...”,或者直接拖放。我喜欢将其放在“其他源”中,但您可以将它放在任何您喜欢的地方。
将CoreData和CoreText框架添加到每个将使用InnerBand的目标中。
完成!
InnerBand支持ARC。实际上,它只支持ARC。如果您仍在运行未使用ARC的项目,那么InnerBand可能不适合您。
InnerBand相信单元测试。因此,如果您打开项目,您将找到大量单元测试,它们直接展示了如何使用InnerBand。
官方的多部分教程从InnerBand教程第1部分:简介和函数开始。
想看到InnerBand组件的实际效果吗?您可以在InnerBand/demo/Catalog/中运行InnerBand目录处的InnerBand目录项目。这以单元测试无法演示的方式展示了InnerBand的视觉功能。
InnerBand由Rapture In Venice创建。