hachinoBlog

hachinobuのエンジニアライフ

Objective-C

CoreDataから取得してオブジェクトがdata:になった時の対処

SeminarテーブルとPlaceテーブルでリレーションを持たせてSeminarテーブルにPlaceオブジェクトのカラムであるplaceカラムを作成。 Seminarテーブルから一定の条件のデータを取得した際に Seminar *semi = (Seminar *)[_fetchedResultsController objectAtInd…

ObjectIDでCoreData内から検索する方法

SeminarテーブルとPlaceテーブルを作成して対多のリレーションを作成した。 SeminarテーブルにPlaceテーブルのオブジェクトを持つカラムplaceを定義。 Seminarテーブルのplaceカラムの値を取得しようとしてplaceを指定してNSDictionary型で取得したところ と…

親クラスのdeallocを呼ぶ位置

deallocメソッドで親クラスのdeallocを呼び出すのは必ず自クラスのオブジェクトを全てreleaseした後。 最後に[super deallo]を呼ぶこと

CoreDataで生成されるsqliteファイルについて

CoreDataを使用してsqliteファイルを生成すると自分で定義したカラムの他に Z_PK,Z_ENT,Z_OPTという3つのカラムがシステムに自動で生成されている。 iPhoneアプリだけでなくAndroidアプリでも同じsqliteファイルを使いたかったのでこれについて調べた。 ま…

Xcode4.5でxibファイルを作成して遷移させるとiOS5以下でクラッシュする問題について

Xcode4.5で新たに画面をxibファイルで作成しNavigationControllerで遷移すると iOS6では問題なく遷移したのに対してiOS5以前の環境ではクラッシュした。 原因はXcode4.5から.xibファイルを作成すると自動でAutolayoutが有効になるから。 対処法としては該当…

Xcode4.4でimportの補完ができなくなった場合の対処方法

Xcode4.4を使うようになってから#importでクラスを読み込む際に補完機能による読み込みができなくなった。 対処法は幾つかあるようだが最終的にプロジェクトの[TARGETS]-[プロジェクト名]-[Build Settings]-[Search Paths]-[User Header Search Paths]に [+]…

TableHeaderViewの横画面対応

アプリで横画面対応をしているときに詰まったのでメモ 単純に全画面対応にするには - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // Return YES for supported orientations return YES; }普通は上記でO…

NSBundle pathForResourceでファイルはあるのにパスを取ってこれない現象について

実際にアプリにファイルを配置してそのファイルのpathを取得する為に [[NSBundle mainBundle] pathForResource:[filename] ofType:@"sqlite"]で取得しようとしたんだけど返される値が常にnullだった。この現象は、ファイルをアプリへ組み込む際に[Target Mem…

UITableViewCellにaddSubViewしたViewを変更するやり方

xibファイルでカスタムセルを作成した。 セルにはボタンビューを載せて、そのボタンがタッチされる度にボタンの色が変わるようにする。 その時につまづいたのでメモ - (void)doCellStarButtonTapped:(id)sender event:(id)event { NSSet *touches = [event a…

Xcode Permission Denied

Xcode4.4を使用していて実機にインストールしたsqliteファイルを参照するために[Organizer]-[Devices]-[Applications]から 該当のApplicationをダウンロードしようと思ったら Permission Denied という警告が出た。解決法: Xcodeメニューから[Xcode]-[Prefe…

CoreDataのNSPredicateでlike句を使用した時のエスケープシーケンス(追記あり)

CoreDataのNSPredicateで条件を絞り込む時にlike句を使う場合 ? → 任意の一文字 アスタリスク(*) → 0文字以上の文字列として認識されるので、*と?を検索に使いたい場合はエスケープしてあげる必要がある。2012/08/01追記 エスケープ対象の文字は分かったが\*…

UITableViewのセルの値がスクロールするごとに重なったり壊れる現象

UItableViewCellにUITextFieldをaddSubviewしてテキストフィールドを載せたセルを 1セクションに1セルの形式で9つ作成した。 動作確認したところ、スクロールすると他のセクションのセルが重なったりして滅茶苦茶になっていた。 原因としてはテーブルビュ…

GData(Google Data)をxcode4.3で使う

svn checkout http://gdata-objectivec-client.googlecode.com/svn/trunk/ gdata-objectivec-client-read-only 上記コマンドでプロジェクトを落とす 途中で (R)eject, accept (t)emporarily or accept (p)ermanently? と聞かれるので p でEnter(これしないと…

retinaディスプレイかどうかの判定

[[UIScreen mainScreen] scale]で取得した値が2.0の場合はretinaディスプレイ搭載機種。 iPadかiPhoneかの判別を先にしてあげてから if([[UIScreen mainScreen] scale] == 2.0f) { //Retina } else { //Not Retina }でretinaかどうか判定するのがよろし

URLエンコード

APIにデータを投げるときはURLエンコードするのは基本! NSString *str = (NSString *)CFURLCreateStringByAddingPercentEscapes( NULL, (CFStringRef)エンコード対象を含む文字, NULL, (CFStringRef)@"!*'();:@&=+$,/?%#[]", kCFStringEncodingUTF8 );参考U…

Instruments Target failed to run: Remote exception encounteredエラー

Instrumentsでメモリリークの確認をしようとしたところ Target failed to run: Remote exception encounteredとなって起動しなかった。 Edit Schemeの Run [App名]のBuild Configuration と Profile [App名]のBuild Configuration を Debugに設定し重複名前…

Twitter APIの制限

Twitterからあるアカウントのタイムラインを取得して表示するアプリをいじっている時に Response Code 400 が返って来た。。 URLもおかしくないのに変だと思って調査したらTwitter APIの制限とのことorz 1時間に150アクセス以上するとBad Request(400)が返…

NSDictionary形式で取得した2テーブルの同じカラムの値をソートしてマージする方法

//テーブルAとBにpriceカラムとnameカラムがあり、それぞれから2カラムをNSDictionaryで抽出したとする NSArray *tableA = [self loadA]; //テーブルAから取得 NSArray *tableB = [self loadB]; //テーブルBから取得 //マージ NSMutableSet *set = [[NSMutab…

NSFetchedResultsControllerのsectionNameKeyPathで指定したカラム以外をセクションタイトルにする方法

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { //nameカラムをセクションタイトルとして使用したい場合 NSString *name = [[[[[_fetchedResultsController sections] objectAtIndex:section] objects] va…

NSFetchedResultsControllerから全ての値を取り出すとき

[_fetchedResultsController fetchedObjects] //fetchedObjectsプロパティで全て取得できる //あるカラムだけ取り出したいなら for (int i = 0; i < [[_fetchedResultsController fetchedObjects] count]; i++) { NSString *a = [[[_fetchedResultsControlle…

カスタムUITableViewCellの再利用

自分で定義したカスタムセルのxibファイルを読み込む場合、xibファイルのIdentifierに 実際のコードで使用するCellIdentifierと同じ名前の値を入れてあげないと再利用されない。例: static NSString *CellIdentifier = @"CustomCell"; UITableViewCell *cel…

UIToolbarTextButtonについて

UIToolbarにUIBarButtonItemを載せて,[UIToolbar subviews]で該当のクラスを引っ張りだしたら UIBarButtonItemじゃなくUIToolbarTextButtonクラスとして抽出された。 UIToolbarTextButtonはググったけどよく分からず。。 普通にUIToolbarTextButtonを使おう…

デバッガの変更

xcode4.3はデバッガが今までのGDBじゃなくLLDBがデフォルトで選択されている。 このままNsLogでコンソールに出力すると文字化けが発生。 なので、xcode左上のSchemeのプロジェクト名の箇所をクリックして[Edit Scheme]-[Run App名]を選択して [Info]タブのDe…

Coredataの読み込み先とかまとめ

CoreDataはモデルファイルと読み込み先のファイルを指定してあげることで 複数のDBもしくは複数のデータファイルから読み込みを行うことができる。 NSPersistentStoreCoordinatorでどのモデルファイル、どのファイルから読み込むのか指定している。exception…

処理を一定時間止める

[[NSRunLoop currentRunLoop]runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.5f]];これでOK

case文の中で変数宣言対処法

case文の中で新たに変数を宣言してもエラーになってしまうが{}で囲ってやればエラーにならない。 switch(a) { case :a NSString a = 〜; //これはエラーになる break; case:b { NSString b = 〜; //これならエラーにならない } break; }

画面表示時に指定したセルの位置を初期表示させる

該当のセルまでスクロールさせる方法。 NSIndexPath *indexpath = [NSIndexPath indexPathForRow:5 inSection:0]; //該当のセクションと行指定 [aTableView scrollToRowAtIndexPath:indexpath atScrollPosition:UITableViewScrollPositionTop animated:NO];a…

UIBarButtonItemの色を変える方法

UIBarButtonItemは本来、ボタンの色変更が出来ない。 だけど、UIToolbarに突っ込んだ後にUIViewのサブクラスとなった該当のボタンなら色を変えられる。 // Toolbar生成 UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 460-44, 320, 4…

UIWebViewで表示しているHTMLからjsファイルの読み込み時注意点

UIWebViewのloadHTMLStringで読み込んだ時にbaseURLでリソースのパスを指定してやるのは当たり前なのだが jsファイルの場合はそれだけでは、指定したリソースに存在しないと認識されてしまう。 原因としてはXcodeでjsファイルをコンパイル対象のファイルとし…

iPhoneのMacアドレスを取得する

色々悩んだけど下記のファイルを使用したら簡単に取れた。。ライセンスはMITライセンスです。 https://gist.github.com/662203NetworkInformation.hをインポートしてprimaryMACAddressメソッドを呼ぶだけ。