▼iPhoneプログラミングメモ▼
ユーティリティ
システム
//乱数シード + (void)srand { srand(time(0)); } //乱数の取得 + (int)rand:(int)num { return abs(arc4random())%num; } //現在時刻の取得 + (double)currentTimeMillis { return (double)[[NSDate date] timeIntervalSince1970]; } //年月日の取得(cal.year/month/day/hour/minute) + (NSDateComponents*)calendar { NSDate *date=[[[NSDate alloc] init] autorelease]; NSCalendar *gregorian=[[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease]; unsigned int unitFlag=NSMonthCalendarUnit|NSDayCalendarUnit| NSYearCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit; return [gregorian components:unitFlag fromDate:date]; }
アプリケーション
//URLスキームのオープン + (void)openURL:(NSString*)url { [[UIApplication sharedApplication] openURL: [NSURL URLWithString:url]]; } //インジケーターの指定 + (void)setIndicator:(BOOL)indicator { [UIApplication sharedApplication]. networkActivityIndicatorVisible=indicator; } //自動ロックの指定 + (void)setAutoLock:(BOOL)autoLock { [[UIApplication sharedApplication] setIdleTimerDisabled:autoLock]; } //ステータスバーの指定 + (void)setStatusBar:(BOOL)statusBar { [UIApplication sharedApplication]. statusBarHidden=!statusBar; }
アプリ URLスキーム Safari http://
https://
ftp://通話 tel:123456789 SMS sms:12345689 メール mailto:npaka0@npaka.net?cc=npaka1@npaka.net&subject=Test&body=This%20is%20Test! 地図
maps://
デバイス
//システムバージョンの取得 + (NSString*)systemVersion { return [[UIDevice currentDevice] systemVersion]; } //バッテリ状態の取得 + (UIDeviceBatteryState)batteryState { [UIDevice currentDevice].batteryMonitoringEnabled=YES; return [UIDevice currentDevice].batteryState; } //UIView→UIImage - (UIImage*)view2image:(UIView*)view { UIGraphicsBeginImageContext(view.frame.size); CGContextRef c=UIGraphicsGetCurrentContext(); [view.layer renderInContext:c]; UIImage* image=UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image; }
文字列
//Trim + (NSString*)trim:(NSString*)str { return [str stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]]; } //文字列の前方一致検索 + (int)indexOf:(NSString*)str c:(NSString*)c { NSRange range=[str rangeOfString:c]; if (range.location==NSNotFound) return -1; return range.location; } //文字列の後方一致検索 + (int)lastIndexOf:(NSString*)str c:(NSString*)c { NSRange range=[str rangeOfString:c options:NSCaseInsensitiveSearch|NSBackwardsSearch]; if (range.location==NSNotFound) return -1; return range.location; } //文字列→データ + (NSData*)str2data:(NSString*)str { return [str dataUsingEncoding:NSUTF8StringEncoding]; } //データ→文字列 + (NSString*)data2str:(NSData*)data { return [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]; } //URLエンコード + (NSString*)urlencode:(NSString*)str { NSString* result=(NSString*)CFURLCreateStringByAddingPercentEscapes( kCFAllocatorDefault,(CFStringRef)str,NULL, CFSTR(";,/?:@&=+$#!"),kCFStringEncodingUTF8); return [result autorelease]; }
ファイル操作
//ファイル一覧の取得 + (NSArray*)fileNames:(NSString*)fileName { NSString* path=[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; path=[path stringByAppendingPathComponent:fileName]; return [[NSFileManager defaultManager] directoryContentsAtPath:path]; } //ファイル・ディレクトリが存在するか + (BOOL)existsFile:(NSString*)fileName { NSString* path=[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; path=[path stringByAppendingPathComponent:fileName]; return [[NSFileManager defaultManager] fileExistsAtPath:path]; } //ディレクトリの生成 + (void)makeDir:(NSString*)fileName { if ([Util existsFile:fileName]) return; NSString* path=[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; path=[path stringByAppendingPathComponent:fileName]; [[NSFileManager defaultManager] createDirectoryAtPath:path attributes:nil]; } //ファイル・ディレクトリの削除 + (void)removeFile:(NSString*)fileName { if (![Util existsFile:fileName]) return; NSString* path=[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; path=[path stringByAppendingPathComponent:fileName]; [[NSFileManager defaultManager] removeItemAtPath:path error:nil]; } //データ→ファイル + (BOOL)data2file:(NSData*)data fileName:(NSString*)fileName { NSString* path=[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; path=[path stringByAppendingPathComponent:fileName]; return ([data writeToFile:path atomically:YES]); } //データ→ファイル(追加) + (BOOL)data2file_add:(NSData*)data fileName:(NSString*)fileName { NSString* path=[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; path=[path stringByAppendingPathComponent:fileName]; NSFileHandle* fh=[NSFileHandle fileHandleForWritingAtPath:path]; if (fh) { @try { [fh seekToEndOfFile]; [fh writeData:data]; [fh closeFile]; return YES; } @catch(id error) { } } return NO; } //ファイル→データ + (NSData*)file2data:(NSString*)fileName { NSString* path=[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; path=[path stringByAppendingPathComponent:fileName]; return [[[NSData alloc] initWithContentsOfFile:path] autorelease]; } //ファイル→データ(部分) + (NSData*)file2data:(NSString*)fileName offset:(unsigned long long)offset length:(unsigned long long)length { NSString* path=[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; path=[path stringByAppendingPathComponent:fileName]; NSFileHandle* fh=[NSFileHandle fileHandleForReadingAtPath:path]; NSData* data; if (fh) { @try { [fh seekToFileOffset:offset]; data=[fh readDataOfLength:length]; [fh closeFile]; return data; } @catch(id error) { } } return nil; } //リソース→データ + (NSData*)res2data:(NSString*)res { NSBundle* mainBundle=[NSBundle mainBundle]; NSString* path=[mainBundle pathForResource:res ofType:@""]; return [NSData dataWithContentsOfFile:path]; } //リソース→データ(部分) + (NSData*)res2data:(NSString*)res offset:(unsigned long long)offset length:(unsigned long long)length { NSString* path=[[NSBundle mainBundle] pathForResource:res ofType:@""]; NSFileHandle* fh=[NSFileHandle fileHandleForReadingAtPath:path]; NSData* data; if (fh) { @try { [fh seekToFileOffset:offset]; data=[fh readDataOfLength:length]; [fh closeFile]; return data; } @catch(id error) { } } return nil; } //リソース→ファイル + (BOOL)res2file:(NSString*)res fileName:(NSString*)fileName { NSString* from=[[NSBundle mainBundle] pathForResource:res ofType:@""]; NSString* to=[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; to=[to stringByAppendingPathComponent:fileName]; [[NSFileManager defaultManager] copyItemAtPath:from toPath:to error:nil]; return YES; }
リソースのHTMLの読み込み
//リソース→データ - (NSData*)res2data:(NSString*)res { NSString* file=[[NSBundle mainBundle] pathForResource:res ofType:@""]; return [NSData dataWithContentsOfFile:file]; } //データ→文字列 - (NSString*)data2str:(NSData*)data { return [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]; } //Webビューの更新 - (void)updateWebView:(UIWebView*)webView res:(NSString*)res { NSData* data=[self res2data:res]; NSString* html=[self data2str:data]; NSString* path=[[NSBundle mainBundle] resourcePath]; path=[path stringByReplacingOccurrencesOfString:@"/" withString:@"//"]; path=[path stringByReplacingOccurrencesOfString:@" " withString:@"%20"]; path=[NSString stringWithFormat:@"file:/%@//",path]; [webView loadHTMLString:html baseURL:[NSURL URLWithString:path]]; }
システムファイルのHTMLの読み込み
//ファイル→データ - (NSData*)file2data:(NSString*)fileName { NSString* path=[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; path=[path stringByAppendingPathComponent:fileName]; return [[[NSData alloc] initWithContentsOfFile:path] autorelease]; } //データ→文字列 - (NSString*)data2str:(NSData*)data { return [[[NSString alloc] initWithData:data encoding:NSShiftJISStringEncoding] autorelease]; } //Webビューの更新 - (void)updateWebView:(UIWebView*)webView fileName:(NSString*)fileName { NSString* path=[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; path=[path stringByAppendingPathComponent:fileName]; path=[path stringByReplacingOccurrencesOfString:@"/" withString:@"//"]; path=[path stringByReplacingOccurrencesOfString:@" " withString:@"%20"]; NSData* data=[Util file2data:path]; NSString* html=[Util data2str:data]; [webView loadHTMLString:html baseURL:[NSURL URLWithString: [NSString stringWithFormat:@"file:/%@//",path]]]; }
非同期通信
//HTTP通信 - (void)http2data:(NSString*)url { NSURLRequest* request=[NSURLRequest requestWithURL:[NSURL URLWithString:url]]; [NSURLConnection connectionWithRequest:request delegate:self]; } //サーバからのレスポンス受信時に呼ばれる - (void)connection:(NSURLConnection*)connection didReceiveResponse:(NSURLResponse*)response { _data=[[NSMutableData data] retain]; } //サーバからデータ受信時に呼ばれる - (void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)data { [_data appendData:data]; } //ダウンロード完了時に呼ばれる - (void)connectionDidFinishLoading:(NSURLConnection*)connection { _textField.text=[self data2str:_data]; [_data release]; _data=nil; }
バイブレーション
//バイブレーション + (void)vibrate { AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); }