哇!终于到了obj-c编程系列的第15篇喽,一路走过来满不容易的哦!(怎么个意思,这才哪到哪啊!),为了能够更好的练习obj-c在Cocoa框架上的编程,接下来会以N篇Cocoa实例的博文来巩固和记忆前面和新学到的东西啊!

这15“章”的第1篇,我用一个简单的mac os x程序来开头吧,使用Xcode6beta(以后均称为x6b)编写,主要为Random类,其方法seed与按钮"reset random seed"绑定,方法generate与按钮"show rand number"绑定;其实例变量text_field与NSTextFieldCell控件绑定。为了增加趣味性,每当按下按钮会随机挑选系统中存在的一种语句报随机数,不多说了,下面上代码:

comm.h

//
//  comm.h
//  mac_test
//
//  Created by kinds on 14-7-4.
//  Copyright (c) 2014年 kinds. All rights reserved.
//

#import <Foundation/Foundation.h>

#define msg(...) NSLog(__VA_ARGS__)

Random.h

//
//  Random.h
//  mac_test
//
//  Created by kinds on 14-7-4.
//  Copyright (c) 2014年 kinds. All rights reserved.
//

#import "comm.h"
#import <Cocoa/Cocoa.h>

@interface Random : NSObject{
	IBOutlet NSTextField *text_field;
}

-(IBAction)seed:(id)sender;
-(IBAction)generate:(id)sender;

@end

Random.m

//
//  Random.m
//  mac_test
//
//  Created by kinds on 14-7-4.
//  Copyright (c) 2014年 kinds. All rights reserved.
//

#import "Random.h"

@implementation Random{
	NSSpeechSynthesizer *speech;
	NSArray *voices;
}

-(id)init{
	self = [super init];
	if(self){
		speech = [[NSSpeechSynthesizer alloc] initWithVoice:nil];
		voices = [NSSpeechSynthesizer availableVoices];
		msg(@"%@",voices);
	}
	return self;
}

-(void)set_voice{
	int idx = (int)(random() % [voices count]);
	[speech setVoice:[voices objectAtIndex:(NSUInteger)idx]];
}

-(IBAction)generate:(id)sender{
	int i = (int)(random() % 100000000000) + 1;
	msg(@"i = %d",i);
	[text_field setIntValue:i];
	[self set_voice];
	[speech startSpeakingString:[NSString stringWithFormat:@"%i",i]];
}

-(IBAction)seed:(id)sender{
	srandom((unsigned)time(NULL));
	NSString *str = @"the seed is reseted!";
	[text_field setStringValue:str];
	[speech startSpeakingString:str];
}

-(void)awakeFromNib{
	NSDate *now = [NSDate date];
	[text_field setObjectValue:now];
}

@end

窗口布局如下:

程序执行界面如下,我恨不得做一个带声音的视频(看来本猫想多了):

obj-c编程15[Cocoa实例01]:一个会发声的随机数生成器的更多相关文章

  1. [原创]obj-c编程15[Cocoa实例02]:KVC和KVO的实际运用

    原文链接:obj-c编程15[Cocoa实例02]:KVC和KVO的实际运用 我们在第16和第17篇中分别介绍了obj-c的KVC与KVO特性,当时举的例子比较fun,太抽象,貌似和实际不沾边哦.那么 ...

  2. obj-c编程15[Cocoa实例02]:KVC和KVO的实际运用

    我们在第16和第17篇中分别介绍了obj-c的KVC与KVO特性,当时举的例子比较fun,太抽象,貌似和实际不沾边哦.那么下面我们就用一个实际中的例子来看看KVC与KVO是如何运用的吧. 该例中用到了 ...

  3. obj-c编程15[Cocoa实例03]:MVC以及归档化演示样例

    前面的博文里介绍了归档和解档,这里我们把它实际应用到一个简单的代码中去,将它作为一个多文档应用程序的打开和保存的背后支持.另外这里介绍一下MVC思想,这个在不论什么语言里都会有,它是一种设计思想,主要 ...

  4. obj-c编程15[Cocoa实例04]:基于Core Data的多文档程序示例[未完待续]

    上一个例子我们使用的模式数据实际上是基于一个Person数组,现在我们看一下如何使用Cocoa中的Core Data框架支持,几乎不用写一行代码,完成模式数据的建立. 我们这里模式的元素使用的是Car ...

  5. obj-c编程15[Cocoa实例03]:MVC以及归档化示例

    前面的博文里介绍了归档和解档,这里我们把它实际应用到一个简单的代码中去,将它作为一个多文档应用程序的打开和保存的背后支持.另外这里介绍一下MVC思想,这个在任何语言里都会有,它是一种设计思想,主要可以 ...

  6. Cocoa练习01:一个简单的Todo list程序

    写一个简单的todo list程序,界面如下图: 在TextField区域输入文字,点击Add按钮会将文字显示在下面的TableView列表中.TableView列表有2列,第一列是文字的输入时间:第 ...

  7. Linux编程之《只运行一个实例》

    概述 有些时候,我们要求一个程序在系统中只能启动一个实例.比如,Windows自带的播放软件Windows Medea Player在Windows里就只能启动一个实例.原因很简单,如果同时启动几个实 ...

  8. Dart编程实例 - 第一个Dart程序

    Dart编程实例 - 第一个Dart程序 main() { print("Hello World!"); } 本文转自:http://codingdict.com/article/ ...

  9. C#网络编程TCP通信实例程序简单设计

    C#网络编程TCP通信实例程序简单设计 采用自带 TcpClient和TcpListener设计一个Tcp通信的例子 只实现了TCP通信 通信程序截图: 压力测试服务端截图: 俩个客户端链接服务端测试 ...

随机推荐

  1. 剑指Offer——巧妙使用sort(List<T>,Comparator<? super T>)比较器

    剑指Offer--巧妙使用sort(List<T>,Comparator<? super T>)比较器 先入为主 package cn.edu.ujn.offersword; ...

  2. 02_IO操作的基本规律(InputStream,OutputStream,Reader,Writer,FileReader,FileWriter,BufferedReader,BufferedWri

     模拟BufferedInputStream,编写一个类 package toto.IO; import java.io.IOException; import java.io.InputStre ...

  3. 12 SharedPreferences

    SharedPreferences 创建方式 SharedPreferences preferences = getPreferences(Context context ,int mode); 参数 ...

  4. Android项目开发填坑记-Fragment的onAttach

    背景 现在Android开发多使用一个Activity管理多个Fragment进行开发,不免需要两者相互传递数据,一般是给Fragment添加回调接口,让Activity继承并实现. 回调接口一般都写 ...

  5. Android 四种常见的线程池

    引入线程池的好处 1)提升性能.创建和消耗对象费时费CPU资源 2)防止内存过度消耗.控制活动线程的数量,防止并发线程过多. 我们来看一下线程池的简单的构造 public ThreadPoolExec ...

  6. 无刷新更新listview

    闲来无事,写点水文吧!有用得着的可以参考下,无刷新更新listview是什么意思呢?举个例子,在订单类listview列表中,常常会有各种订单状态,拿商城类app来说,会有待付款,待收货,确认收货等等 ...

  7. 软考下午题详解---uml图

    在上篇博客中,小编主要简单的对软考下午题当中的数据流图设计进行了一系列总结,今天我们继续来看软考下午题当中大题部分,uml图的相关知识,在我们学习的过程中,我们也已经接触过,西安交大刘惠老师讲解过um ...

  8. Android的PopupWindow使用android学习之旅(四十三)

    PopupWindow简介 PopupWindow是一个类似dialog的控件,可以接受任何的view作为下拉列表显示. 用法 代码展示 package peng.liu.test; import a ...

  9. 1057. Stack (30) - 树状数组

    题目如下: Stack is one of the most fundamental data structures, which is based on the principle of Last ...

  10. Ext JS 6应用程序Build后出现“c is not a constructor return new c(a[0])”的处理

    概述 在对Ext JS 6的应用程序打包后,时不时会出现以下错误: 由于是压缩后出现的错误,要进行调试也无从下手,因而这个错误会令新手手足无措,不知道是怎么回事. 错误原因 造成该错误的主要原因是要创 ...