RSS Reader for MAC Code
该项目代码来自于王志刚 《软件创富密码:iPhone应用程序开发攻略之深入浅出Objective-C 2.0》一书,这是一个图例很丰富的书,适合入门阅读。
首先给出最终接图,接着给代码:
代码
// // AppController.h // RSS Reader // // Created by longx-app on 13-9-14. // Copyright (c) 2013年 longx-app. All rights reserved. // #import <Foundation/Foundation.h>@interface AppController : NSTableView <NSTableViewDataSource> {NSXMLDocument* document;IBOutlet id linkTextField;IBOutlet id titleTextField;IBOutlet id urlTextField;IBOutlet NSTableView *tableView; }- (IBAction)readURL:(id)sender;@end
// // AppController.m // RSS Reader // // Created by longx-app on 13-9-14. // Copyright (c) 2013年 longx-app. All rights reserved. // #import "AppController.h"@implementation AppController// NSTableView数据资源 - (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {if (!document) {return 0;}// 取得 “/rss/channel/item” 节点NSArray* nodes;nodes = [document nodesForXPath:@"/rss/channel/item" error:NULL];if ([nodes count] == 0) {// 取得 “/rdf:RDF/item” 节点nodes = [document nodesForXPath:@"/rdf:RDF/item" error:NULL];}if ([nodes count] == 0) {// 取得 “/feed/entry” 节点nodes = [document nodesForXPath:@"/feed/entry" error:NULL];}// 返回节点的个数return [nodes count]; }- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {// 判断实例变量document是否有效,无效则退出处理if (!document) {return nil;}// 使用identifier方法取得参数tableColumn的识别符,此识别符会用于后面列的判别id identifier;identifier = [tableColumn identifier];// 对 XML 文档使用 nodesForXPath: 方法取得 item 节点数组// 取得 “/rss/channel/item” 节点NSArray* nodes;nodes = [document nodesForXPath:@"/rss/channel/item" error:NULL];if ([nodes count] == 0) {// 取得 “/rdf:RDF/item” 节点nodes = [document nodesForXPath:@"/rdf:RDF/item" error:NULL];}if ([nodes count] == 0) {// 取得 “/feed/entry” 节点nodes = [document nodesForXPath:@"/feed/entry" error:NULL];}// 根据行参数row取得指定行的item节点NSXMLNode* node;node = [nodes objectAtIndex:row];// 以下使用识别符来判断具体的列,首先是title列,从item节点中取得title节点,找到// title的值后,返回此值if ([identifier isEqual:@"title"]) {// 取得 “title” 的字符串nodes = [node nodesForXPath:@"title" error:NULL];if ([nodes count] == 1) {node = [nodes objectAtIndex:0];return [node stringValue];}}// 其次是link列,从item节点,找到后返回link值。if ([identifier isEqual:@"link"]) {// 取得 ”link“ 的字符串nodes = [node nodesForXPath:@"link" error:NULL];if ([nodes count] == 1) {node = [nodes objectAtIndex:0];return [node stringValue];}}return nil; }- (IBAction)readURL:(id)sender {NSURL* url;url = [NSURL URLWithString:[urlTextField stringValue]];// 创建XML文档,这里的URL如果是远程文件的话,必须以http://或ftp://开头,如果是// 本地的,必须以file:///开头document = [[NSXMLDocument alloc] initWithContentsOfURL:url options:0 error:NULL];if (!document) {return;}// 取得 “/rss/channel/title” 节点NSArray* nodes;nodes = [document nodesForXPath:@"/rss/channel/title" error:NULL];if ([nodes count] == 0) {// 取得 “/rdf:RDF/channel/title” 节点nodes = [document nodesForXPath:@"/rdf:RDF/channel/title" error:NULL];}if ([nodes count] == 0) {// 取得 “/feed/title” 节点nodes = [document nodesForXPath:@"/feed/title" error:NULL];}if ([nodes count] == 1) {NSXMLNode* titleNode;titleNode = [nodes objectAtIndex:0];// 设置RSS文档的标题NSString* title;title = [titleNode stringValue];[titleTextField setStringValue:title];}// 取得 “/rss/channel/link” 节点nodes = [document nodesForXPath:@"/rss/channel/link" error:NULL];if ([nodes count] == 0) {// 取得 “/rdf:RDF/channel/link” 节点nodes = [document nodesForXPath:@"/rdf:RDF/channel/link" error:NULL];}if ([nodes count] == 0) {// 取得 “/feed/link” 节点nodes = [document nodesForXPath:@"/feed/link" error:NULL];}if ([nodes count] == 1) {NSXMLNode* linkNode;linkNode = [nodes objectAtIndex:0];// 设置RSS文档对应网页的URLNSString* link;link = [linkNode stringValue];[linkTextField setStringValue:link];}// 表格数据读入 [tableView reloadData]; }@end
其中,readURL:动作主要完成对远程RSS文档的读取,因为RSS文档的版本众多,为取得RSS文档的标题以及URL,方法中进行了多重判断处理,请参照RSS版本说明来阅读上述代码。
转载于:https://www.cnblogs.com/loveq/p/3321747.html
RSS Reader for MAC Code相关推荐
- PhoneGap RSS Reader
这是关于如何使用phoneGap来开发手机上的RSS阅读器的文章,原作者分别写了四个版本.如下所示: 原文链接:http://www.raymondcamden.com/index.cfm/2011/ ...
- RSS Reader实例开发之联网开发
在OPhone应用程序中,如果我们要做一些费时的操作,例如,从网络获取数据,就不能将这些操作放在普通的处理UI的逻辑中,否则,主线程一旦执行耗时任务,将无法响应用户的任何操作,OPhone系统会判定该 ...
- AJAX RSS Reader Step by Step Tutorial
在网上找到一篇关于ajax rss reader的文章,写得很好,而且简单明了,现翻译如下,不当之处,还请见谅(原文地址:http://ajax.phpmagazine.net/2005/11/aja ...
- Mac电脑上的阅读神器 Koodo Reader for Mac
Koodo Reader 是一款开源的跨平台电子书阅读器,支持阅读 epub.pdf.mobi.azw3 以及 txt 格式的电子书. 应用介绍 Koodo Reader是一款开源的跨平台电子书阅读器 ...
- 好用的RSS阅读器-My RSS Reader
我对好用的RSS阅读器定义是 必须是免费的 必须可以自定义订阅源 必须是简洁的,不要华而不实 必须有夜间模式,毕竟保护眼睛是头等大事 基于以上几点,开发了 My RSS Reader . 目前已经发布 ...
- Sharepoint 2019 RSS Reader
1.激活网站集功能和网站功能的SharePoint Server 标准版网站集功能 2.貌似开通匿名才能进行RSS订阅 3.在库中开通rss订阅,点击库 即可看到rss 4.添加rss reader ...
- Blog RSS Reader 资料整理
打算在空闲的时候做一个个人使用的Blog RSS Reader,今天开始收集资料 dim objHTTP,objXML,objXSL Set objXSL = Server.CreateObject( ...
- RSS Reader实例开发之系统设计
系统设计 基于OPhone的RSS Reader将以Google Reader的功能为参考,并充分考虑到手机屏幕的限制.RSS Reader将实现以下几个Activity: 1. Ma ...
- RSS Reader实例开发之使用Service组件
原文地址::http://www.ophonesdn.com/article/show/122 到目前为止,我们已经实现了RSS Reader的基本功能,在这个OPhone应用程序中,我们使用Acti ...
最新文章
- Tomcat maven 插件启动出现tomcat\conf\tomcat-users.xml cannot be read异常解决方法
- 儿童游戏html5,节日H5丨提前了解下,比小猪佩奇更社会的儿童节H5游戏
- 如何在家写出一份无懈可击的产品文档
- python基础教程:装饰器的高级应用
- 基于c++的马氏距离算法代码_监控警戒区基于掩码算法的简单实现(附代码)
- CentOS7安装Docker与使用篇
- 线程的局部变量ThreadLocal概念
- 通过 GitHub Actions 自动创建 Github Release
- 《计算机网络自顶向下》之重头戏迪杰斯特拉算法
- 了解 yarn 、npm、nodejs
- 2019 最全阿里天猫Java 3面真题,含面试题答案!
- 嵌入式操作系统内核原理和开发(改进的链表内存分配算法)
- java编写设置按钮随机背景色_java – 如何设置自定义按钮状态背景颜色?
- 使用emacs作为mysql的客户端
- linux打包解压包(tar.gz )
- 2019届中国银联面试总结(内推上海岗,合肥面试)
- STM32LL库系列教程(一)—— LL库概览及资料
- Retrofit自定义CallAdapterFactory
- Web前端开发项目(记忆卡片)
- 二维码图片生成(带文字显示)