Consoleウィンドウってどうやってだすの?

手動(Command+Shift+R)で表示

常に出す方法

[環境設定]-[デバック]-[開始時:] とたどり 「コンソールとデバッカを表示」

コード補完ってどうするの

[環境設定]-[入力補助]

printfってどうやるんだっけ?

うまくいった例

NSLog(message);

message は@"hoge"をStringPtr?で渡した

puts("test3");

printf("にほんご");

メソッドをつくって呼び出す例もやってみた

println(@"にほんご");

でよびだして、

void println(NSString *message){
	printf([message UTF8String]);
}

うまく行かなかった例

printf(@"test");

この@は下記のような意味を持つ

NSString *str01 = @"test";

System.out.println("test");

Objective-Cの文字列クラス

Foundationに含まれる

NSString

NSMutableString?

である。

NSStringは、Javaでいうところのstatic final Stringである。

そのため、NSMutableString?がJavaのStringに相当する。

文字列の連結

NSString *str03 = [str01 stringByAppendingString?:str02];

Javaだと

String str03 = str01 + str02 ;

と表現するところだ。

この長い文字列は、ユーザが探しやすくするためのもので、ユーザがコードをタイピングしやすくすることを意図していないだろう。

マクロを使った文字列連結例

NSString *str1 = @"AAA";
NSString *str2 = [str1 stringByAppendingString: [NSString stringWithCString: "BBB" encoding: NSUTF8StringEncoding]];
#define AS(A,B) [(A) stringByAppendingString:([NSString stringWithCString: B encoding: NSUTF8StringEncoding])]
NSString *str2 = AS(str1,"BBB");

JavaでいうところのObjectってどうなってるの?

idというクラス名になっている。 これの場合のみ例外的にインスタンス生成時に*がいらないObjective Cの*は オブジェクトを宣言しながら値を格納する場合につかっている感じがする。

文字列の改行の注意点

正規表現

RegexKit? Framework

http://regexkit.sourceforge.net/

上記のサイトからRegexKitLite?をダウンロードします。

RegexKitLite?-2.2.tar.bz2を展開すると、以下のようになります。

RegexKitLite?.h、RegexKitLite?.mをプロジェクトにコピーする

プロジェクトを選択し、ファイル>情報を見る>ビルド>リンク>他のリンカフラグに-licucoreを設定します。

基本的にNSStringとNSMutableString?のカテゴリとして作られているので、文字列のインスタンスに対して、メッセージを送信する形で使用します。

NSString *searchString      = @"This is neat.";
NSString *regexString       = @"\\b(\\w+)\\b";
NSString *replaceWithString = @"{$1}";
NSString *replacedString    = NULL;

replacedString = [searchString stringByReplacingOccurrencesOfRegex:regexString withString:replaceWithString];

NSLog(@"replaced string: '%@'", replacedString);
// 2008-07-01 19:03:03.195 test[68775:813] replaced string: '{This} {is} {neat}.'

繰り返しマッチさせるような場合には、Match Enumeratorを作成するようにとドキュメントには書いてありますが、exmplesディレクトリに同梱されているRKLMatchEnumerator?がそのまま使用できます。

以下はドキュメントに掲載のサンプルです。

#import <Foundation/NSAutoreleasePool.h>
#import "RegexKitLite.h"
#import "RKLMatchEnumerator.h"
int main(int argc, char *argv[]) {
 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
 NSString     *searchString    = @"one\ntwo\n\nfour\n";
 NSEnumerator *matchEnumerator = NULL;
 NSString     *regexString     = @"(?m)^.*$";

 NSLog(@"searchString: '%@'", searchString);
 NSLog(@"regexString : '%@'", regexString);

 matchEnumerator = [searchString matchEnumeratorWithRegex:regexString];

 NSUInteger  line          = 0;
 NSString   *matchedString = NULL;

 while((matchedString = [matchEnumerator nextObject]) != NULL) {
   NSLog(@"%d: %d '%@'", ++line, [matchedString length], matchedString);
 }

 [pool release];
 return(0);
}

文字列をカンマで区切る

- (NSArray*) search:(NSString*)line {
	NSMutableArray *resultArray = [NSMutableArray array];
	NSCharacterSet* chSet = [NSCharacterSet characterSetWithCharactersInString:@","];
	NSScanner* scanner = [NSScanner scannerWithString:line];
	NSString* scannedPart = nil;
	
	while(![scanner isAtEnd]) {
		if([scanner scanUpToCharactersFromSet:chSet intoString:&scannedPart]) {
			[resultArray addObject:scannedPart];
		}	
		[scanner scanCharactersFromSet:chSet intoString:nil];
	}
	if( [resultArray count] < 1 )
		return nil;
	return resultArray;
}

http://www.atmarkit.co.jp/fcoding/articles/objc/04/objc04a.html

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-05-13 (木) 09:43:49 (5095d)