2013年08月26日

Objective-CのNSMutableStringで編集可能な文字列オブジェクトを作成

NSMutableStringオブジェクトで作成した文字列オブジェクトは後から変更や追加が可能です。

文字列オブジェクトにはstringWithCapacityで文字列の長さを指定しますが、これを超えた長さの文字列の追加なども可能です。

NSMutableString *str = [NSMutableString stringWithCapacity:10];
[str appendString:@"Hello"];
NSLog(@"%@",str);//Hello
[str appendString:@" World"];
NSLog(@"%@",str);//Hello World
[str deleteCharactersInRange:NSMakeRange(5, 6)];
NSLog(@"%@",str);//Hello
[str insertString:@"2012/01" atIndex:0];
NSLog(@"%@",str);//2012/01Hello


appendStringメソッドで文字列を後ろに追加していけます。deleteCharactersInRangeメソッドでは指定したレンジの文字列の削除が、insertStringメソッドでは指定した位置に文字列が追加できます。
posted by ねこまんま at 00:51
Comment(0) | TrackBack(0) | iPhone

Objective-CのNSStringクラスで文字列を扱う

Objective-CではNSStringクラスで文字列を扱うことができます

NSString *str = @"hello world!";
NSLog(@"%@",str);//hello world!


stringWithFormatメソッドを利用することでフォーマットに文字列や数値などを入れて新しい文字列を作成することができます。

NSString *str1 = @"hello";
NSString *str2 = @"world!";
int point = 12;
NSString *str = [NSString stringWithFormat:@"%@ + %@ / %d",str1,str2,point];
NSLog(@"%@",str);//hello + world! / 12


NSStringクラスのインスタンスに対してstringByAppendingStringメソッドで文字列の連結が可能です。

NSString *str1 = @"hello";
NSString *str2 = @"world!";
NSString *str = [str1 stringByAppendingString:str2];
NSLog(@"%@",str);


lengthメソッドで文字列の長さが取得できます。

NSString *str = @"hello world!";
NSInteger num = [str length];
NSLog(@"%d",num);//12


substringFromIndexメソッドやsubstringToIndexメソッドでは文字列を特定の位置から取り出すことができます。引数には位置を指定し、位置以降を取得するにはsubstringFromIndexメソッド、位置以前を取得するにはsubstringToIndexメソッドを利用します。

NSString *str = @"hello world!";
NSString *str1 = [str substringFromIndex:4];
NSString *str2 = [str substringToIndex:4];
NSLog(@"%@",str1);//o world!
NSLog(@"%@",str2);//hell


ある位置から特定の文字数だけ取得する場合にはsubstringWithRangeメソッドを利用します。substringWithRangeメソッドは引数にNSRangeオブジェクトをとり、NSRangeのlocationプロパティに開始位置をlengthプロパティに取得文字数を指定します。

NSString *str = @"hello world!";
NSRange range;
range.location = 4;
range.length = 3;
NSString *str1 = [str substringWithRange:range];
NSLog(@"%@",str1);//o w


NSMakeRangeメソッドを利用するとNSRangeオブジェクトとプロパティを簡単に指定できます。

NSString *str = @"hello world!";
NSString *str1 = [str substringWithRange:NSMakeRange(4, 3)];
NSLog(@"%@",str1);


rangeOfStringメソッドを利用すると文字列の検索を行うことができます。検索結果はNSRangeオブジェクトで返ってきます。

NSString *str = @"hello world!";
NSString *search = @"he";
NSRange range = [str rangeOfString:search];
if(range.location == NSNotFound){
NSLog(@"%@は含まれていません",search);
}else{
NSLog(@"%@は含まれています%d文字目です",search,range.location+1);
}


isEqualToStringメソッドで文字列の比較が行えます。

NSString *str1 = @"str1";
NSString *str2 = @"str1";
if([str1 isEqualToString:str2]){
NSLog(@"%@と%@は同じも熾烈です",str1,str2);
}


compareメソッドを文字列の比較を行うこともできます、

NSString *str1 = @"str1";
NSString *str2 = @"str1";
if([str1 compare:str2] == NSOrderedSame){
NSLog(@"%@と%@は同じも熾烈です",str1,str2);
}


lowercaseStringメソッドやuppercaseStringメソッドを利用すると文字列を小文字/大文字に変換できます。

NSString *str = @"iPhone";
NSLog(@"%@",[str lowercaseString]);//iphone
NSLog(@"%@",[str uppercaseString]);//IPHONE


stringByReplacingOccurrencesOfStringメソッドを利用すると文字列の置き換えができます。

NSString *str = @"iPhone";
NSLog(@"%@",[str stringByReplacingOccurrencesOfString:@"Phone" withString:@"Pad"]);


stringByReplacingCharactersInRangeメソッドを利用すると指定した範囲の文字列を置き換えます。

NSString *str = @"iPhone";
NSLog(@"%@",[str stringByReplacingCharactersInRange:NSMakeRange(1, 5) withString:@"Pad"]);


integerValueメソッドで文字列を数値に、boolValueで真偽値に変換します。

NSString *str1 = @"123";
NSLog(@"%d",[str1 integerValue]);//123
NSString *str2 = @"y";
NSLog(@"%d",[str2 boolValue]);//1
posted by ねこまんま at 00:39
Comment(0) | TrackBack(0) | iPhone

2013年08月21日

Objective−CでNSDateクラスを使う

例えば日付を制御するNSDateクラスを使うには以下のように記述します。

NSDate *theDate = [NSDate alloc];
theDate = [theDate init];

NSLog(@"theDate = %@",theDate);//theDate = 2013-08-20 16:24:47 +0000


allocメソッドを利用しNSDateのインスタンスを作成し、initメソッドでインスタンスの初期化を行ないます。これでインスタンスであるtheDateでNsDateクラスのプロパティやメソッドが利用できるようになります。

上記の記述は以下のように一括で書くこともできます。

NSDate *theDate = [[NSDate alloc] init];

NSLog(@"theDate = %@",theDate);//theDate = 2013-08-20 16:28:49 +0000


initメソッドではなくinitWithTimeIntervalSinceNowメソッドで初期化すると指定した秒数後の日付オブジェクトが作成されます。

NSDate *theDate = [[NSDate alloc] initWithTimeIntervalSinceNow:30];

NSLog(@"theDate = %@",theDate);//theDate = 2013-08-20 16:31:03 +0000


initWithTimeIntervalSince1970メソッドでは1970年からの指定した秒数後の日付オブジェクトが作成されます。

NSDate *theDate = [[NSDate alloc] initWithTimeIntervalSince1970:100];

NSLog(@"theDate = %@",theDate);//theDate = 1970-01-01 00:01:40 +0000


通常はallocメソッドでインスタンスを生成し、イニシャライズメソッドで初期化を行ないますが、コンビニエンスコンストラクタを利用するとこれらを同時におこなってくれます。

NSDate *theDate = [NSDate date];

NSLog(@"theDate = %@",theDate);//theDate = 2013-08-20 16:36:54 +0000


NSDateFormatterクラスを利用すると任意の日付オブジェクトが取得できます。NSDateFormatterクラスのインスタンスのsetDateFormatメソッドで日付のフォーマットを与え、dateFromStringを利用することで日付のフォーマットと同じ日付オブジェクトが取得できます。

NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy年mm月dd日"];
NSDate * theDay = [df dateFromString:@"1999年12月31日"];
NSLog(@"theDay = %@",theDay);//theDay = 1999-01-30 15:12:00 +0000


NSLocaleクラスを利用することローケルの指定が可能です。

NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy年mm月dd日"];
NSDate * theDay = [df dateFromString:@"1999年12月31日"];
NSLocale *local = [NSLocale currentLocale];
NSLog(@"theDay = %@",[theDay descriptionWithLocale:local]);//theDay = Sunday, January 31, 1999, 12:12:00 AM Japan Standard Time


NSDateFormatterクラスのstringFromDateメソッドを利用すると日付オブジェクトから日付の文字列が取得できます。

NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy年mm月dd日"];
NSDate * theDay = [df dateFromString:@"1999年12月31日"];
NSLog(@"theDay = %@",[df stringFromDate:theDay]);//theDay = 1999年12月31日


NSDateオブジェクトのtimeIntervalSinceDateメソッドを利用すれば日付オブジェクト間の秒数が取得できます。

NSDate *theDate1 = [NSDate date];
NSDate *theDate2 = [NSDate dateWithTimeIntervalSinceNow:300];
NSTimeInterval since = [theDate2 timeIntervalSinceDate:theDate1];
NSLog(@"since = %f",since);//since = 300.000014


NSDate *theDate1 = [NSDate date];
NSDate *theDate2 = [NSDate dateWithTimeIntervalSinceNow:300];
NSTimeInterval since = [theDate1 timeIntervalSinceDate:theDate2];
NSLog(@"since = %f",since);//since = -300.000014


日付の比較はNSDateクラスのisEqualToDateメソッドで行ないます。

NSDate *theDate1 = [NSDate date];
NSDate *theDate2 = [NSDate dateWithTimeIntervalSinceNow:300];

BOOL equal1 = [theDate1 isEqualToDate:theDate2];
NSLog(@"%d",equal1);//0

BOOL equal2 = [theDate1 isEqualToDate:theDate1];
NSLog(@"%d",equal2);//1


日付の大小の比較はNSDateクラスのisEqualToDateメソッドで行ないます。

isEqualToDateの結果はNSOrderedAscendingやNSOrderedDescending、NSOrderedSameといった定数で返ってきます。

NSDate *theDate1 = [NSDate date];
NSDate *theDate2 = [NSDate dateWithTimeIntervalSinceNow:300];
NSComparisonResult result = [theDate1 compare:theDate2];
switch (result) {
case NSOrderedAscending:
NSLog(@"date1のほうが小さい");
break;
case NSOrderedDescending:
NSLog(@"date1のほうが大きい");
break;
case NSOrderedSame:
NSLog(@"同じ");
break;


参考:詳細! Objective-C iPhoneアプリ開発 入門ノート
posted by ねこまんま at 11:05
Comment(1) | TrackBack(0) | iPhone

2013年08月15日

Objective-Cのメソッド

今までよくわからなかったObjective-Cのメソッドが分かってきたのでメモ書き。

メソッドの定義

- (void)test
{
NSLog(@"ok");
}


これでclassファイルにtestメソッドが定義できる。

[self test];


これでtestメソッドが実行出来る。

つまりViewControllerクラスにtestメソッドを指定して実行するには以下のようにする。

- (void)viewDidLoad
{
[super viewDidLoad];
[self test];
}
- (void)test
{
NSLog(@"ok");
}


引数がひとつの場合は以下のようにメソッドを定義

- (void)test:(NSString *)str1
{
NSLog(@"%@",str1);
}


次のように実行する

[self test:@"hoge"];


引数が2つの場合は以下のようにメソッドを定義

- (void)test:(NSString *)str1 str2:(NSString *)str2
{
NSLog(@"%@/%@",str1,str2);
}


次のように実行する。2個以上の引数の指定はラベルの指定が必要になる

[self test:@"hoge1" str2:@"hoge2"];


返り値がある場合は以下のように定義。- (void)ではなく返す値の型を指定する。

-(NSString *)test
{
return @"hoge";
}


次のように実行する。

NSString *hoge =[self test];
NSLog(@"%@",hoge);
posted by ねこまんま at 14:50
Comment(0) | TrackBack(0) | iPhone

2013年08月02日

iPoneのUIWebViewでユーザーエージェントを変更する

iPoneのUIWebViewでユーザーエージェントを変更する方法をネットで調べて確かめたところどれもうまく行かず、以下の方法でうまくいきました。

NSDictionary *dictionnary = [[NSDictionary alloc] initWithObjectsAndKeys:@"Your desired user agent", @"UserAgent", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionnary];


ただし、これはUIWebViewをallocする前に指定しなくてはいけないので以下のような指定になる

NSDictionary *dictionnary = [[NSDictionary alloc] initWithObjectsAndKeys:@"Your desired user agent", @"UserAgent", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionnary];
UIWebView *customWebView = [[UIWebView alloc]initWithFrame:CGRectMake(0, 0, 320, 480)];


NSDictionaryはオブジェクトをキー値と要素を対として保持する配列クラスです。

UIWebViewでUserAgentを変える方法 | エンジニア開発記
NSDictionary - iPhoneアプリ開発の虎の巻
posted by ねこまんま at 15:58
Comment(0) | TrackBack(0) | iPhone

iPhoneアプリのUIWebViewでJavaScriptを実行する方法

iPhoneアプリのUIWebViewでJavaScriptを実行する方法。

webViewDidFinishLoadイベントが発生した際にstringByEvaluatingJavaScriptFromStringでJSの文字列を実行してやればいいっぽい。

-(void)webViewDidFinishLoad:(UIWebView *)webView
{
NSString *js = @"alert('ok');";
[webView stringByEvaluatingJavaScriptFromString:js];
}
posted by ねこまんま at 04:39
Comment(0) | TrackBack(0) | iPhone

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。