《苹果开发之Cocoa编程》挑战2 创建一个数据源 练习
《苹果开发之Cocoa编程》第4版

P87 创建一个to-do list应用程序,在文本框中输入任务。当用户单击Add按钮时,添加字符串到一个变长队列,新任务就出现在list的末尾。
关键点:
1.NSString 类型的变量去除首尾空格方法:[nsstringItem stringByTrimmingCharactersInSet: [NSCharacterSetwhitespaceAndNewlineCharacterSet]]
2.TableView控件重新加载数据的方法:[_tableView reloadData]
3.TableView添加数据源需要实现的两个方法:
(1)-(NSInteger)numberOfRowsInTableView:(NSTableView *)tv; 在此方法中返回数据源中数据的数量。
(2)-(id)tableView:(NSTableView *)tv objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row; 在此方法中返回row行 tableColumn列的数据内容。
4.TableView如果是可编辑的表格,并使用基于单元格的表格视图,需要实现的方法:
-(void)tableView:(NSTableView *)tv setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
在此方法中更新数据源的数据,然后tableView重新加载数据(reloadData)。
5.两个outlet(文本框、数据列表)和一个action都是通过Assistant editor 面板添加(方便快捷)。
6.在头文件中声明一个变长数组用于存储数据,并做为tableView的数据源。

ToDoLisDemoAppDelegate.h源代码
//
// ToDoLisDemoAppDelegate.h
// ToDoLisDemo
//
// Created by apple on 13-7-11.
// Copyright (c) 2013年 FDStudio. All rights reserved.
//
#import <Cocoa/Cocoa.h>
@interface ToDoLisDemoAppDelegate : NSObject <NSApplicationDelegate>{
NSMutableArray *_array;
}
@property (assign) IBOutlet NSWindow *window;
@property (weak) IBOutlet NSTextField *textField; //添加的文本框outlet
@property (weak) IBOutlet NSTableView *tableView; //添加的tableView表格outlet
- (IBAction)addToDataSource:(id)sender;
@end
ToDoLisDemoAppDelegate.m 源代码
//
// ToDoLisDemoAppDelegate.m
// ToDoLisDemo
//
// Created by apple on 13-7-11.
// Copyright (c) 2013年 FDStudio. All rights reserved.
//
#import "ToDoLisDemoAppDelegate.h"
@implementation ToDoLisDemoAppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Insert code here to initialize your application
}
-(id)init{
self = [super init];
if(self){
//初始化变长数组
_array = [[NSMutableArray alloc] init];
}
return self;
}
-(NSInteger)numberOfRowsInTableView:(NSTableView *)tv{
return (NSInteger)[_array count];
}
-(id)tableView:(NSTableView *)tv objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row{
NSString *v = [_array objectAtIndex:row];
return v;
}
-(IBAction)addToDataSource:(id)sender {
//获取文本框内容
NSString *item = [_textField stringValue];
//去掉字符串首尾的空格
item = [item stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];
){
[_array addObject: item]; //将字符串添加到变长数组中
[_tableView reloadData]; //tableView重新加载数据
[_textField setStringValue: @""]; //清空文本框的内容
}
}
//编辑tableView需要实现的方法
-(void)tableView:(NSTableView *)tv setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row{
[_array replaceObjectAtIndex: row withObject:object]; //修改变长数组中的内容
[_tableView reloadData]; //tableView重新加载数据
}
@end
源代码下载:
《苹果开发之Cocoa编程》挑战2 创建一个数据源 练习的更多相关文章
- 《苹果开发之Cocoa编程》挑战1 创建委托 练习
<苹果开发之Cocoa编程>第4版 P87 新建一个单窗口应用程序,设置某对象为窗口的委托,当用户调整窗口尺寸时,确保窗口高度为宽度的2倍. 需要实现的委托方法为:-(NSSize)win ...
- 苹果开发之COCOA编程(第三版)上半部分
第一章:什么是Cocoa 1.1 历史简介 1.2 开发工具:Xcode.Interface Builder(一个GUI构建工具).在它们内部,使用gcc为编译器来编译代码,并使用gdb来查找错误 1 ...
- 《苹果开发之Cocoa编程》键-值编码和键-值观察
一.KVC 键-值编码(Key - Value Coding, KVC)是通过变量名的读取和设置变量值的一种方法,将字符串的变量名作为key来引用.NSObject定义了两个方法(KVC方法)用于变量 ...
- 苹果开发之COCOA编程(第三版)下半部分
第十八章:Image和鼠标事件 1.NSResponderNSView继承自NSResponder类.所有的事件处理方法都定义在NSResponder类中.NSResponder申明了如下方法:- ( ...
- IOS开发之Cocoa编程—— NSUndoManager
在Cocoa中使用NSUndoManager可以很方便的完成撤销操作.NSUndoManager会记录下修改.撤销操作的消息.这个机制使用两个NSInvocation对象栈. NSInvocation ...
- 苹果开发之App签名
如果你的Apple ID账号(可使用邮箱来注册)为Apple developer类型的话,登录之后是看不到Certificates, Indentifiers & Profiles信息的 Ap ...
- iOS项目开发之Socket编程
有一段时间没有认真总结和写博客了 前段时间找工作.进入工作阶段.比较少静下来认真总结,现在静下心来总结一下最近的一些心得 前言 AsyncSocket介绍 AsyncSocket详解 AsyncSoc ...
- Unity3D游戏开发之C#编程中常见数据结构的比较
一.前言 Unity3D是如今最火爆的游戏开发引擎,它可以让我们能轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型的互动内容.它支持2D/3D游戏开发,据不完全统计,目前国内80%的手机游戏都 ...
- 李洪强iOS开发之OC[013] -类的创建的练习
// // main.m // 12 - 类的创建练习 // // Created by vic fan on 16/7/9. // Copyright © 2016年 李洪强. All ri ...
随机推荐
- [网络技术][转]PPTP连接过程
转自:http://blog.csdn.net/zhu_hit/article/details/5698958 在未来几天会总结一下PPTP的工作过程,分为以下3篇讲述. 1. PPTP连接过程: 2 ...
- SharePoint 2013 开发——概述
博客地址:http://blog.csdn.net/FoxDave 近来阅读SharePoint 2013开发一书,带着与大家一起分享其中的内容. 部署场景: 本地部署(On-Premise D ...
- IOS 中 NSArray
今天在做 cordova 关于处理未读条数的插件时,需要在js中传入 int 型. 但是发现所有插件 里面的参数信息都是封装在NSArry对象里面. 因此又突然想直接在NSArry获取信息的想法 ...
- HTML--11marquee标签
页面的自动滚动效果,可由javascript来实现, 但是有一个html标签 - <marquee></marquee>可以实现多种滚动效果,无需js控制. 使用marquee ...
- HDU 3336 - Count the string(KMP+递推)
题意:给一个字符串,问该字符串的所有前缀与该字符串的匹配数目总和是多少. 此题要用KMP的next和DP来做. next[i]的含义是当第i个字符失配时,匹配指针应该回溯到的字符位置. 下标从0开始. ...
- 一点点webservice的小知识
怕自己忘了记录下来好了 在web.config中要配置自己要调用的webservice的地址 在自己controller中获取web.config中配置的地址 SystemManager.Config ...
- hdu 2037
PS: - -原本想的是排序开始时间和消耗时间..后来想到可以排序结束时间..后来还wa了一次,因为排序的时候溢出了 思路: 1 3 //13 4 //20 7 3 8 2 9 5 10 //36 ...
- DVRF:路由器漏洞练习靶机 Damn Vulnerable Router Firmware
0×01 概述 这个项目的目的是来帮助人们学习X86_64之外其他架构环境,同时还帮助人们探索路由器固件里面的奥秘. 目前为止,该项目是基于Linksys E1550 为基础进行安装. 0×02 安装 ...
- Effective C++ ----以对象管理资源
以对象管理资源 通过对象的析构函数的自动调用来自动释放资源 第一部分:几种典型的以对象管理资源的例子 1. STL::auto_ptr 获取资源后立刻放入资源管理对象 std::auto_ptr< ...
- BZOJ 1816 扑克牌
WA的我怀疑人生.. 发现原来是循环中间就要break掉,不然爆int. 总感觉这题可以直接构造啊.. #include<iostream> #include<cstdio> ...