— boreal-kiss.com

Archive
Tag "Objective-C"

ピッカーを回転させたときのカチカチというクリック音を無効にするにはUIPickerViewのsetSoundsEnabled:メソッドで引数をNOに設定してやればよい。しかしメソッド自体は定義されているのに、UIKit.h(UIPikerView.h)で宣言されていないらしく、そのまま使うとコンパイル時に警告がでる。警告は出るが呼び出しは可能なので気にならない人はそれでOK。気になる人は新たに宣言を追加してやればよい。UIKit.hやUIPickerView.hに直接書き込むのは怖いのでカテゴリを用意する(宣言だけ必要なのでヘッダーファイルのみ作成)。

//  UIPickerView-Mute.h
 
#import <UIKit/UIKit.h>
 
@interface UIPickerView (Mute)
 
-(void) setSoundsEnabled:(BOOL)enabled;
 
@end

あとはUIPickerViewを呼び出すファイル内にインクルードしてやれば先ほどの警告が出なくなる。

#import "UIPickerView-Mute.h"
 
UIPickerView *picker = [[UIPickerView alloc] init];
[picker setSoundsEnabled:NO];
Read More

発売はどちらも2009年7-8月予定。先すぎて死ねる。

  • The Essential Guide to Iphone Application Development for Flash Users
    The Essential Guide to Iphone Application Development for Flash Users (Essential Guide)

    Flash専門の感のあったFriendsofEDがとうとうiPhone app本出すらしい。ただし単なるiPhone本ではなくFlashユーザーのため、としているところが一風変わったところか。ここのFlashユーザーのためのPHP本がわかりやすかったので興味はある。Essentialと付いているのでチンカス本の可能性もなきにしもあらず。

  • Cocoa Design Patterns
    Cocoa Design Patterns (Developer's Library)

    Cocoaデザインパターン本。CocoaやObjective-Cを題材にしたデザインパターンの本は存在しないので非常に興味がある。iPhone SDKプログラミング大全の著者、木下誠がダイナミックObjective-C | コラムでObjective-Cを題材にしたデザインパターンのネット解説を行っているがタイトル通りコラムの域を超えておらず、この手の内容は書物としてしっかり読みたい僕としては満足できない。

ちなみにデザインパターンの発祥はCocoaらしい。すげーなCocoa!イマイチしっくりこないけど!

もっとも、正確に言えば、Cocoaがデザインパターンを応用しているのではなく、デザインパターンがCocoaをもとにして作られた訳だが。GoF本では、パターンの実例として、Cocoaの前身である、NEXTSTEPが何度も取り上げられている。また、パターンの1つであるChain of Responsibilityという名前は、明らかにAppKitのResponder Chainから取られていると考えられる。

【コラム】ダイナミックObjective-C (49) デザインパターンで読み解くCocoa

Read More

コーディングの趣味の話なので必ずしも重要ではないが、個人的には大発見。

Problem

インスタンスプロパティ(Objective-Cではインスタンス変数と呼ぶ)の表示名とgetter/setter(Objective-Cではアクセサメソッドと呼ぶ)の表示名を異なるものにしたい。例えば、インスタンス変数をNSStringの”_name”と定義、そのアクセサメソッドは先頭のアンダースコアを除いた”name”で扱いたい。

Recipe

プロパティの定義は普通に”_name”とする。setter/getterを作成する際に以下のような細工をする。@propertyと@synthesizeの書き方が定義されたインスタンス変数と若干異なる(特に@synthesize)。

//TestClass.h
@interface TestClass : NSObject{
	NSString *_name;
}
@property (retain) NSString *name;
 
@end
 
//TestClass.m
@implementation TestClass
@synthesize name = _name;
 
@end

クラス内部でのインスタンス変数への直接アクセス(“_name”)とアクセサメソッド経由のアクセス(“self.name”)が明確に区別できるのが利点。Xcodeの適当な色づけに頼るよりアンダースコアの有無による絶対的な判断の方がしっくりくるという理由もある。

ActionScriptで言うと

上記内容は以下のgetter/setterと同等。ほんとに趣味の問題。

protected var _name:String;
 
public function get name():String{
	return _name;
}
 
public function set name(value:String):void{
	_name = value;
}

Reference

【コラム】ダイナミックObjective-C (102) プロパティ(2) – プロパティの宣言 | エンタープライズ | マイコミジャーナル

Read More

GeSHi – Generic Syntax Highlighterはプログラムソースを修飾語などにきれいに色付けした状態でhtmlソースとして出力してくれるPHPパッケージ。対応言語が豊富で、ActionScriptやObjective-Cも対応している。GeSHiを使ったWebサービスが見当たらないのはプロジェクトライセンスがGPLのためなのかな。

使い方

  1. sourceforge.netからパッケージをダウンロード。パッケージ全体をPHPが動作する環境に配置する。
  2. パッケージで定義されているGsShiクラスにhtml化したいソースファイルのストリング内容とパースしたい言語を引数に渡してパースさせる。
  3. パース内容を出力させたものがhtml化されたソースコードになる。

ActionScript 3.0の場合

例えばTest.asの中身を表示したい場合、PHPファイルに以下のように記述して実行。

<?php
 
include('geshi.php');
 
//Language
$lang = 'actionscript3';
 
//Raw source code
$path = 'Test.as';
 
$src = file_get_contents($path);
$geshi = new GeSHi($src, $lang);
$geshi->enable_keyword_links(false);
 
echo $geshi->parse_code();
?>

上記PHPファイル実行時の出力内容は以下の通り。Flex Builderと全く同じ見た目が出力される。インデントがちょっと深いぐらい?

package {
	import flash.display.Sprite;
 
	/**
	 * Test.as
	 */ 
	public class Test extends Sprite{
		/**
		 * Constructor
		 */ 
		public function Test(){
			this.init();
		}
 
		protected function init():void{
			trace("Hello");
		}
	}
}
 

Objective-Cの場合

例えばTestAppDelegate.mの中身を表示したい場合、PHPファイルに以下のように記述して実行。

<?php
 
include('geshi.php');
 
//Language
$lang = 'objc';
 
//Raw source code
$path = 'TestAppDelegate.m';
 
$src = file_get_contents($path);
$geshi = new GeSHi($src, $lang);
$geshi->enable_keyword_links(false);
 
echo $geshi->parse_code();
?>

上記PHPファイル実行時の出力は以下の通り。まあアリ?

//
//  TestAppDelegate.m
//  Test
//
//  Created by boreal-kiss.com on 09/02/08.
//  Copyright boreal-kiss.com 2009. All rights reserved.
//
 
#import "TestAppDelegate.h"
#import "TestViewController.h"
 
@implementation TestAppDelegate
 
@synthesize window;
@synthesize viewController;
 
 
- (void)applicationDidFinishLaunching:(UIApplication *)application {    
 
    // Override point for customization after app launch    
    [window addSubview:viewController.view];
    [window makeKeyAndVisible];
}
 
 
- (void)dealloc {
    [viewController release];
    [window release];
    [super dealloc];
}
 
 
@end
 

その他

パッケージデフォルトだとSpriteやintなんかに変なURLのリンクがくっつくので、以下の設定でキーワードへのURLリンクを無効にしておくとよい。

$geshi->enable_keyword_links(false);

出力された内容をそのままブログなんかにコピー&ペーストしたいのであれば、以下のように出力内容を設定してやるとよい。出力内容がhtmlタグの形で表示される。

//echo $geshi->parse_code();
 
echo '<pre>';
echo htmlspecialchars($geshi->parse_code());
echo '</pre>';
Read More

iPhone関連の記事が三つ目という意味で3日目。まず手元にあるiPhoneアプリケーションに関する本(後述Erica Sadunの本)がどうにもこうにも読解不能だったのでStephen KochanのObjective-C本を読んだがこれが当たり。読み進めていく上で他の言語と比較していると出てきてしまう不可解な点への解答が必ずといっていいほど数ページ以内に言及されており安心して読み進められる。特にメモリ管理の章が秀逸で、ガベージコレクション標準装備の言語に慣れ親しんでいる人が読むと目から鱗が落ちるのではないだろうか。OOPの理解があればスムーズに読み進められると思う。C言語特有のポインタだったり構造体だったりについても一章割いて説明しているのでC言語初心者でもまあなんとか。オススメ。

Stephen Kochan – Programming in Objective-C
Programming in Objective-C

Objective-Cの仕組みを理解して、じゃあ手元のiPhoneの本(後述Erica Sadunの本)を読もうと思ったらやっぱり無理だった。なんか読めなさすぎてむかついてきたので、amazon.co.ukのカスタマーレビューではどんな評価なのかと思ったら「初端から超ディープなところに連れてかれるから気をつけろ」「この本を解読するのにまた別にCocoaの本が必要」「ビギナーはストレスばっかりたまる」等々、一貫してビギナーがいきなり読む本ではないとのこと。自分だけ読めないわけじゃなくてほっとした。

Erica Sadun – The iPhone Developer’s Cookbook
The iPhone Developer's Cookbook: Building Native Applications for the iPhone (Developer's Library)

じゃあ他に何かよい本ないのかと思って探したらもう一冊あった。この本のレビューは先ほどのものと違って、全部ポジティブなものばかり。「Erica SadunのiPhoneの本(上記)にがっかりしてたけどこれは読み進めやすい」「Aaron Hillegass(後述)よりもさらに読みやすいかもしれない」等々。とにかくステップアップ感覚が好評価の様子でベタほめ。

Dave Mark – Beginning iPhone Development: Exploring the iPhone SDK
Beginning iPhone Development: Exploring the iPhone SDK

前述のAaron HillegassはCocoa本Aaron Hillegass – Cocoa Programming for Mac OS Xの著者。Stephen Kochan(上記Objective-Cの著者)がObjective-C本文中でeasy-to-readスタイルのCocoa推薦書としてAaron Hillegassの本を挙げていた。そりゃ買うでしょ。一応自分の中の購入決心への流れをまとめると、

  • 僕はErica SadunのiPhoneの本が解読できなかった
  • Erica SadunのiPhoneの本が解読できなかった人がDave MarkのiPhone本をレビューでベタほめしていた
  • Dave MarkのiPhone本はAaron HillegassのCocoa本よりeasy-to-readスタイルだとレビューでベタほめされていた
  • Stephen Kochanが上記Aaron HillegassのCocoa本を読みやすいと推薦していた
  • 僕はStephen KochanのObjective-Cの本が読みやすかった

ちなみに円高なので(1GBP=130円ぐらい?去年の今頃は250円だった)送料含めてもamazon.co.ukやamazon.comから買う方が安いかもですよ。意外と発送早いし。

Read More

あまりにキツすぎるのでネットで情報収集。Objective-C入門が簡潔にまとまっていて非常にわかりやすかった。オススメ。Objective-Cで驚いたのは

  • C言語の上位完全互換言語であること
  • garbage collectionがないこと
  • C言語っぽいところとC言語っぽくないところの差が激しいこと
  • 久々にポインターを見たこと

などなど。文法さえ慣れてしまえば一般的なOOPっぽいのだが、それにしてもActionScriptと骨格が違いすぎる。肝心のiPhone SDKの方は、Interface Builderを使わずにゴリゴリスクリプト書くやり方もあるらしいことが判明。クラスファイルのみでコーディングしたかったのでうれしい。今日は得るもの無し。知恵熱だけ出た。

Read More

XcodeでC言語を、ActionScriptでOOPの体系を理解しているはずなので割とスムーズに事が運ぶだろうと思っていたけどかなりハード。Objective-C 2.0はC言語に毛が生えたようなものではなかった。さらにAppleが提供する得体の知れないフレームワークが重なって難航中。読み進めているのは以下の二冊。

  • iPhone SDK Development
    iPhone SDK Development

    amazon.co.jpでは予約受付中になっているがThe Pragmatic Bookshelf | iPhone SDK Developmentでpdf版が買える。製本はまだされていない。Objective-CやCocoaを知っていれば初心者が納得しつつすすめられそうな感じ。僕は難航中。

  • The iPhone Developer’s Cookbook
    The iPhone Developer's Cookbook: Building Native Applications for the iPhone (Developer's Library)

    amazon.co.jpでは予約受付中になっているが、amazon.com(僕はamazon.co.uk経由で購入)ではペーパー版が買える。Cookbookと題されているだけあってある程度iPhone SDKを触っている人向けな内容。僕は余裕で理解不能。

iPhone SDKだけど、完全にスクリプティングのみで開発するものじゃないかんじ?Interface Builderという専用のソフトとXcodeの間をいったりきたりでめまぐるしい。ボタンの動作等、イベントの仕組みもよくわからん。とりあえず使用言語の仕組みを知らないと話が始まりそうになかったのでObjective-Cの本を一冊注文。2-3日で届けばよいな。

Read More