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版本说明来阅读上述代码。

posted on 2013-09-14 20:52  loveq369 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/loveq/p/3321747.html

RSS Reader for MAC Code相关推荐

  1. PhoneGap RSS Reader

    这是关于如何使用phoneGap来开发手机上的RSS阅读器的文章,原作者分别写了四个版本.如下所示: 原文链接:http://www.raymondcamden.com/index.cfm/2011/ ...

  2. RSS Reader实例开发之联网开发

    在OPhone应用程序中,如果我们要做一些费时的操作,例如,从网络获取数据,就不能将这些操作放在普通的处理UI的逻辑中,否则,主线程一旦执行耗时任务,将无法响应用户的任何操作,OPhone系统会判定该 ...

  3. AJAX RSS Reader Step by Step Tutorial

    在网上找到一篇关于ajax rss reader的文章,写得很好,而且简单明了,现翻译如下,不当之处,还请见谅(原文地址:http://ajax.phpmagazine.net/2005/11/aja ...

  4. Mac电脑上的阅读神器 Koodo Reader for Mac

    Koodo Reader 是一款开源的跨平台电子书阅读器,支持阅读 epub.pdf.mobi.azw3 以及 txt 格式的电子书. 应用介绍 Koodo Reader是一款开源的跨平台电子书阅读器 ...

  5. 好用的RSS阅读器-My RSS Reader

    我对好用的RSS阅读器定义是 必须是免费的 必须可以自定义订阅源 必须是简洁的,不要华而不实 必须有夜间模式,毕竟保护眼睛是头等大事 基于以上几点,开发了 My RSS Reader . 目前已经发布 ...

  6. Sharepoint 2019 RSS Reader

    1.激活网站集功能和网站功能的SharePoint Server 标准版网站集功能 2.貌似开通匿名才能进行RSS订阅 3.在库中开通rss订阅,点击库 即可看到rss 4.添加rss reader ...

  7. Blog RSS Reader 资料整理

    打算在空闲的时候做一个个人使用的Blog RSS Reader,今天开始收集资料 dim objHTTP,objXML,objXSL Set objXSL = Server.CreateObject( ...

  8. RSS Reader实例开发之系统设计

    系统设计         基于OPhone的RSS Reader将以Google Reader的功能为参考,并充分考虑到手机屏幕的限制.RSS Reader将实现以下几个Activity: 1. Ma ...

  9. RSS Reader实例开发之使用Service组件

    原文地址::http://www.ophonesdn.com/article/show/122 到目前为止,我们已经实现了RSS Reader的基本功能,在这个OPhone应用程序中,我们使用Acti ...

最新文章

  1. Tomcat maven 插件启动出现tomcat\conf\tomcat-users.xml cannot be read异常解决方法
  2. 儿童游戏html5,节日H5丨提前了解下,比小猪佩奇更社会的儿童节H5游戏
  3. 如何在家写出一份无懈可击的产品文档
  4. python基础教程:装饰器的高级应用
  5. 基于c++的马氏距离算法代码_监控警戒区基于掩码算法的简单实现(附代码)
  6. CentOS7安装Docker与使用篇
  7. 线程的局部变量ThreadLocal概念
  8. 通过 GitHub Actions 自动创建 Github Release
  9. 《计算机网络自顶向下》之重头戏迪杰斯特拉算法
  10. 了解 yarn 、npm、nodejs
  11. 2019 最全阿里天猫Java 3面真题,含面试题答案!
  12. 嵌入式操作系统内核原理和开发(改进的链表内存分配算法)
  13. java编写设置按钮随机背景色_java – 如何设置自定义按钮状态背景颜色?
  14. 使用emacs作为mysql的客户端
  15. linux打包解压包(tar.gz )
  16. 2019届中国银联面试总结(内推上海岗,合肥面试)
  17. STM32LL库系列教程(一)—— LL库概览及资料
  18. Retrofit自定义CallAdapterFactory
  19. Web前端开发项目(记忆卡片)
  20. 二维码图片生成(带文字显示)

热门文章

  1. 如何限制计算机游戏,Win7如何利用映像劫持限制电脑玩游戏?
  2. 全国口译笔译考试CATTI-笔译三级考试大纲
  3. iOS 指定视图的圆角、label、button圆角设置
  4. get 和 post 俩种提交表单的方式
  5. 什么是施密特触发器?
  6. STC32G 单片机EEPROM 操作实例
  7. JVM体系结构篇之JVM的整体结构
  8. 网络入门基础(基本网络的了解和配置)
  9. 基于Android Studio的Android内存泄漏检测方法
  10. telephony.db分析