《苹果开发之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 创建一个数据源 练习的更多相关文章

  1. 《苹果开发之Cocoa编程》挑战1 创建委托 练习

    <苹果开发之Cocoa编程>第4版 P87 新建一个单窗口应用程序,设置某对象为窗口的委托,当用户调整窗口尺寸时,确保窗口高度为宽度的2倍. 需要实现的委托方法为:-(NSSize)win ...

  2. 苹果开发之COCOA编程(第三版)上半部分

    第一章:什么是Cocoa 1.1 历史简介 1.2 开发工具:Xcode.Interface Builder(一个GUI构建工具).在它们内部,使用gcc为编译器来编译代码,并使用gdb来查找错误 1 ...

  3. 《苹果开发之Cocoa编程》键-值编码和键-值观察

    一.KVC 键-值编码(Key - Value Coding, KVC)是通过变量名的读取和设置变量值的一种方法,将字符串的变量名作为key来引用.NSObject定义了两个方法(KVC方法)用于变量 ...

  4. 苹果开发之COCOA编程(第三版)下半部分

    第十八章:Image和鼠标事件 1.NSResponderNSView继承自NSResponder类.所有的事件处理方法都定义在NSResponder类中.NSResponder申明了如下方法:- ( ...

  5. IOS开发之Cocoa编程—— NSUndoManager

    在Cocoa中使用NSUndoManager可以很方便的完成撤销操作.NSUndoManager会记录下修改.撤销操作的消息.这个机制使用两个NSInvocation对象栈. NSInvocation ...

  6. 苹果开发之App签名

    如果你的Apple ID账号(可使用邮箱来注册)为Apple developer类型的话,登录之后是看不到Certificates, Indentifiers & Profiles信息的 Ap ...

  7. iOS项目开发之Socket编程

    有一段时间没有认真总结和写博客了 前段时间找工作.进入工作阶段.比较少静下来认真总结,现在静下心来总结一下最近的一些心得 前言 AsyncSocket介绍 AsyncSocket详解 AsyncSoc ...

  8. Unity3D游戏开发之C#编程中常见数据结构的比较

    一.前言 Unity3D是如今最火爆的游戏开发引擎,它可以让我们能轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型的互动内容.它支持2D/3D游戏开发,据不完全统计,目前国内80%的手机游戏都 ...

  9. 李洪强iOS开发之OC[013] -类的创建的练习

    // //  main.m //  12 - 类的创建练习 // //  Created by vic fan on 16/7/9. //  Copyright © 2016年 李洪强. All ri ...

随机推荐

  1. [转]Android进程与线程基本知识

    转自:http://www.cnblogs.com/hanyonglu/archive/2012/04/12/2443262.html 本文介绍Android平台中进程与线程的基本知识. 很早的时候就 ...

  2. 摘自:java夜未眠之java学习之道

    目前Java可以说是产业界和学术界最热门的语言,许多读者都很急切想把Java学好.除非是武侠小说中的运功传送内力的方式,否则花上一段时间苦学是免不了的.花时间,不打紧,就是怕方法错误,事倍功半.我认为 ...

  3. Node.js的简介和安装

    一.Node.js的简介和安装 a)       什么是Node.js? Node.js是一个开发平台 让JavaScript运行在服务器端的开发平台 ---简单点说就是用JavaScript写服务器 ...

  4. HttpApplication 类,HttpApplicationState 类

    HttpApplication 类 定义 ASP.NET 应用程序中的所有应用程序对象共有的方法.属性和事件.此类是用户在 Global.asax 文件中所定义的应用程序的基类. https://ms ...

  5. Git ~ 添加远程仓库 ~Git

    现在的情景是 , 你已经在本地创建了一个Git仓库后 , 又想在 Github 创建一个Git 仓库并且让这两个仓库进行远程同步 , 这样Github 上的仓库既可以作为备份 ,有可以让其他人通过仓库 ...

  6. 初见Gnuplot——时间序列的描述

    研读一本书,<数据之魅:基于开源工具的数据分析>(Data Analysis with Open Source Tools),写的很好.这里,复述一下书中用Gnuplot分析时间序列数据的 ...

  7. ASP.NET之Ajax系列(一)

    我们在Web开发中经常会接触到Ajax技术,同时Ajax技术也有很多种实现方式,那么,我们今天从第一种方式说起:ASP.NET原生控件实现Ajax. ASP.NET原生控件用于Ajax技术的主要是Up ...

  8. win7登入使用的是临时档案解决方法

    开始——运行(搜索程序与文件)——regedit——HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileLis ...

  9. array_walk() 函数

    array_walk() 函数对数组中的每个元素应用回调函数.如果成功则返回 TRUE,否则返回 FALSE. 典型情况下 function 接受两个参数.array 参数的值作为第一个,键名作为第二 ...

  10. Expect:100-continue

    在使用curl做POST的时候, 当要POST的数据大于1024字节的时候, curl并不会直接就发起POST请求, 而是会分为俩步, 发送一个请求, 包含一个Expect:100-continue, ...