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

    哇!终于到了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

窗口布局如下:

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

时间: 2024-12-02 04:54:48

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

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

    上一个例子我们使用的模式数据实际上是基于一个Person数组,现在我们看一下如何使用Cocoa中的Core Data框架支持,几乎不用写一行代码,完成模式数据的建立.     我们这里模式的元素使用的是Car,其属性直接在Xcode中设置: 可以看到Car类型含有6中不同属性.接下来删除窗口中的文本控件,添加Array Controller控件,并将其Managed Object Context与File's Owner的managedObjectContext绑定.如下图: 将控制器的

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

写一个简单的todo list程序,界面如下图: 在TextField区域输入文字,点击Add按钮会将文字显示在下面的TableView列表中.TableView列表有2列,第一列是文字的输入时间:第二列是文字内容本身.同时TableView的第二列是可以实时手动编辑修改的,修改后自动会修正对应第一列的时间: 1.在AppDelegate类的接口中首先绑定2个outlet和1个action: - (IBAction)add:(id)sender; @property (weak) IBOutle

C++程序设计:原理与实践(进阶篇)15.6 实例:一个简单的文本编辑器

15.6 实例:一个简单的文本编辑器 列表最重要的性质就是可以在不移动元素的情况下对其进行插入或删除操作.下面我们通过一个例子来说明这一点.考虑应该如何在文本编辑器中表示一个文本文件中的字符.所选用的表示方式应当能够使对文本文件进行的操作简单而高效. 那么具体会涉及哪些操作呢?假设文件能存储在计算机的内存中.也就是说,我们可以选择任何一种适合的表示方式,当需要保存到文件中时,只要把它转换成一个字节流就可以了.相应地,我们也可以把一个文件中的字符转成字节流,从而把它读入内存中.这说明我们只需要选择

Android编程之基于Log演示一个activity生命周期实例详解

本文实例讲述了Android编程之基于Log演示一个activity生命周期.分享给大家供大家参考,具体如下: 利用Android的Log 演示一个activity的生命周期 代码: //DemoActivity.java package uni.activity; /* @author octobershiner 2011 7 22 SE.HIT */ import android.app.Activity; import android.os.Bundle; import android.u

071_《Delphi7编程技巧与实例精解》

<Delphi7编程技巧与实例精解> Delphi 教程 系列书籍 (071) <Delphi7编程技巧与实例精解> 网友(邦)整理 EMail: shuaihj@163.com 下载地址: Pdf 作者: 张海卿 张占军 丛书名: 其他 出版社:国防工业出版社 ISBN:7118030163 上架时间:2003-4-15 出版日期:2003 年1月 开本:16开 页码:365 版次:1-1 内容简介 本书汇编了Delphi中比较经典的60个实便,包括8大部分,即基础知识.图形国像

《WCF服务编程》关于“队列服务”一个值得商榷的地方

今天写<WCF技术剖析(卷2)>关于"队列服务"部分,看了<WCF服务编程>相关的内容.里面介绍一个关于"终结点不能共享相同的消息队列"说法,个人觉得这值得商榷.撰写此文,希望对此征求大家的意见.[源代码从这里下载] 目录 一."终结点不能共享相同的消息队列" 二.实践出真知 三.为什么同一个服务的终结点可以共享相同的消息队列 四.为什么不同服务的终结点不能共享相同的终结点 一."终结点不能共享相同的消息队列&q

实例分析一个简单的Win32程序_C 语言

本文较为详细的分析了一个Win32程序的组成.结构.实现方法及运行原理,对于进行Windows程序设计有很好的借鉴参考价值.分享给大家供大家参考之用.具体分析如下: 一.Windows程序与普通C或C++程序的不同 学过C或C++等语言的人都知道,我们写的程序都一个入口,main函数,但是在Win32程序里,我们的入口函数又是什么呢?它是怎么样运行的,跟我们用C或C++写的控制台程序又有什么不同呢? 我们先说Win32程序跟我们控制台的程序的一个很重要的不同点,就是Win32程序是一个消息响应程

tomcat-web编程数据库连接池jdbc的一个问题,连接池感觉弄好了,还是不行哪里错了

问题描述 web编程数据库连接池jdbc的一个问题,连接池感觉弄好了,还是不行哪里错了 org.apache.jasper.JasperException: An exception occurred processing JSP page /exa7_7.jsp at line 18 15: Context initCtx = new InitialContext(); //这里四句是连接池的关键语句,见教材 16: Context envCtx = (Context) initCtx.loo

如何使用 Rails 和七牛云存储,在 15 分钟内打造一个图片分享社交应用原型_服务器其它

十年前,Web 应用框架 Rails 创始人 David Heinemeier Hansson 曾录制视频,向我们演示如何使用 Ruby on Rails 在 15 分钟内创作一个 blog 引擎.这个视频通过 Rails 优秀的 MVC .习惯优于配置(Convention over Configuration)等设计,以及强大的代码生成.scaffold 等功能,成功展示了 Ruby on Rails 编写 Web 应用核心功能的高效简洁.Ruby on Rails 这门技术也在 Web 2