hachinoBlog

hachinobuのエンジニアライフ

キーボード表示するとTextViewが隠れてしまう問題

メモ UITextViewを全面に使っていて、キーボードを表示した際に文字が隠れてしまう問題があるが http://runlooprun.wordpress.com/2011/03/27/linktextviewwithkeybaord/ これが凄かった。ちなみに - (void)keybaordWillHide:(NSNotification*)notification…

データをDELETEした際にROLLBACKされて無限ループになる現象

WEBシステムでiOS用のsqliteファイルを作成して、そのままiOSのアプリで使用してみた。 当然ながらCoreData特有のZ_METADATA,Z_PRIMARYKEYテーブルやZ_ENT,Z_OPTカラムも作成。 sqliteファイルを差し替えて動かすと難なく動いてくれた! しかし、そのsqlite…

全クラスで共通の変数を使い回す方法(グローバル変数のように)

全画面のクラスで共通の変数を使う方法を調べた。 まず全てのルートとなるAppDelegateクラスに変数,プロパティを定義しておく。 次にそのグローバル変数を使いたいクラスで下記を定義 AppDelegate* appDelegate = [[UIApplication sharedApplication] delega…

配列の走査中にデータを消すとでるエラー Collection was mutated while being enumerated.

配列の走査中に格納されているデータを消すと[Collection was mutated while being enumerated.]というエラーでアプリが落ちた。 NSMutableArray *array = @[@"a", @"b", @"c", @"d"]; for (NSString str in array) { if ([str isEqualToString:@"b"]) { [ar…

配列からNSPredicate条件を使ってデータを抽出する方法

NSArrayからNSPredicateを使ってデータを抽出するにはNSArrayのfilteredArrayUsingPredicateメソッドを使う。単純な例 NSArray array = @[@"a", @"b", @"c"]; NSPredicate *predicate = [NSPredicate predicateWithFormat:"SELF = a"]; NSArray result = [ar…

自作クラスのインスタンスをplistに保存する方法

plistはNSString、NSNumber、実数型、数値型、ブール型、NSData、NSDate、NSArray、NSDictionaryのデータしか格納できないため、自作のクラスを配列に格納してplistに書き込もうとしてもエラーになる。 なので自作クラスのインスタンスをData型に変更してや…

リリースビルドのやり方

リリース版では本当にデバッグログが出てないかなど確認したいのでリリースビルドしてみた。やり方メモは [PROJECT],[TARGETS]ともに[Build Settings]タブ-[Code Signing Identity]-[Release]と[Any iOS SDK]を iPhone Developerに設定するだけ。

条件に応じてNSPredicateを連結して使えるNSCompoundPredicate (IN使用時の注意点)

CoreDataでデータを抽出する際にNSPredicateを使用して条件を絞るがNSPredicateのpredicateWithFormatメソッドに IN句を使う際に文字列として作成した変数を条件に入れると落ちてしまう。 //失敗例 NSInvalidArgumentException NSString *column = @"column1…

プロパティのassignとretainの解放について

今更ながらassignとretainが良く分からなくなった。 assignは基本的にreleaseしないという認識だったが下記のような場合は当然releaseしないとメモリリーク。 @interface SampleVC() @property (assign, nonatomic) UIView *view1 @end @implementation Samp…

plistに書き込んだ値が実機だと保存されない事象

自分でリソースフォルダに作成したsample.plistに情報を書き込んだが確認したところ保存されていなかった。 失敗したコードは下記 NSString* path = [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"plist"]; //plistファイルの読み込み NSMutab…

deprecatedのチェックをする方法

忘れないようにメモ。 [PROJECT]-[APP名]-[Deployment Target]にあるiOS Deployment Targetを最新にする。iOS6でdeprecatedが増えていたので現在のプロジェクトで対象を確認したかったが Targetが5.0に設定されていたのでdeprecatedが出てこなかったという。…

Core DataのSave Error(Cocoa error 1570.)

CoreDataを使っていてデータ挿入後の保存時にエラーが吐き出されていた。 insertされたデータがズラズラと載っていて最後に(Cocoa error 1570.)とあった。 色々調べているとエラーログの中に NSValidationErrorKey = place; という記述を発見した。 現在使用…

CoreDataの削除ルール

リレーション関係にある親テーブルのデータを削除したら、そのデータに紐づく子テーブルのデータまで削除されてしまった。 なんでカスケード削除されているのかと思い色々調べたところ、CoreDataの削除オプションを設定できることを知りました。 [DB名].xcda…

linker command failed with exit code 1 の対処

必要なフレームワークを追加していない場合や#importで.hじゃなく.mファイルをimportしていると出る。参考URL http://d.hatena.ne.jp/goodbyegirl1974/20120920/1348106337

UIWebViewでTwitterのmobile画面を開くには(UserAgent変更方法)

UIWebViewでTwitterのハッシュタグ検索結果画面のmobile版URLを表示したらきちんと表示されない現象が起きた。 (mobile版にした訳はUIが見やすかったため。) UserAgentを変更するといけるようだ。 UIWebViewを初期化する前に //UserAgent変更 NSDictionary *…

UIScrollViewに配置した複数のSubviewをピンチイン、ピンチアウトで全て拡大縮小する方法

UIScrollViewのデリゲートである - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollViewを使えば自動でScrollViewに配置したViewもピンチイン、ピンチアウトに合わせて拡大・縮小されるが このデリゲートメソッドは1つのViewしか返せない。 …

ネットワークに接続しているかどうかの判定

ネットワークに接続しているかどうかの判定は凄く簡単で Reachabilityを使えば良い。 ReachabilityクラスはAppleのサンプルコードReachabilityから入手できる。Reachability.hとReachability.mをプロジェクトに入れて SystemConfiguration.frameworkをフレー…

あるViewの親Viewでタッチイベントを取得したい場合

親Viewでタッチイベントを取得したい場合のみ 子Viewで設定されている [_childview setUserInteractionEnabled:YES];の設定を [_childview setUserInteractionEnabled:NO];にしてやれば子View上をタッチしたイベントが親Viewのタッチイベント処理まで流れる。

ローカルファイルからNSURLRequestを生成してNSURLConnectionで接続する方法

外部のサーバにあるxmlファイルじゃなくて自分のプロジェクト内にxmlファイルを置いて それを読み込んでリクエストを作成してNSURLConnectionでNSDateを取得したかったんだけど NSString *filePath = [[NSBundle mainBundle] pathForResource:[ファイル名] o…

CoreDataでIN句を使う方法

CoreDataでIN句を使用する方法は NSArray *users = [NSArray arrayWithObjects:@"user1", @"user2", @"user3", nil]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"user IN %@", users];Not INは NSArray *users = [NSArray arrayWithObjec…

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…