hachinoBlog

hachinobuのエンジニアライフ

2013-01-01から1年間の記事一覧

カスタムセルを使う方法(xibファイル)

カスタムセルを使う方法で色々ハマってしまったのでメモ。 xibファイルを使わずにUITabaleViewCellを継承したクラスを作成した場合は UITableViewDataSourceのcellForRowAtIndexPathで下記のように記述 - (UITableViewCell *)tableView:(UITableView *)table…

iOS5系でNSURLConnectionを使った場合のタイムアウト設定方法

ネットワーク処理でNSURLConnectionを使っているとiOS5系でのみ設定したタイムアウト時間よりも遥かに長く待たされた。 どうやらアップルの仕様でNSURLRequestでPOSTかつbodyに値を設定するとそうなるみたい。問題のコードは下記 NSMutableURLRequest *reque…

自クラスのインスタンスメソッド内でクラスメソッドを呼ぶ方法

自クラスのインスタンスメソッドから自クラスのクラスメソッドは //クラスメソッド + (void)classMethod { //クラスメソッド処理 } //インスタンスメソッド - (void)instanceMethod { [self classMethod]; //これじゃ呼べない }上記のやり方では呼べない。 …

今更ながらNSDictionary,NSArrayへの新しいアクセス方法

今更感満載ですが、NSDictionaryとNSArrayのモダン記法です。 以前の書き方は //NSDictionary NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"hachinobu", @"name", [NSNumber numberWithInt:28], @"age", nil]; NSString *name = [dic …

UIAlertがフリーズする現象

UIAlertViewを表示した瞬間にホームボタンでバックグラウンドへいき再度アプリを開くとUIAlertViewが出たまま画面がフリーズ状態になった。 問題が起きたのは下記コード + (void) simpleSuccessWithTitle:(NSString *)title message:(NSString *)message del…

TableViewで特定のセルだけ編集モードにしない方法

canMoveRowAtIndexPathメソッドでセルを特定して判定してやる - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{ //セルの取得 UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; if (取得…

CoreData: The fetched object at index x has an out of order section name xxxxxx. Objects must be sorted by section name

CoreDataを使用したコードでNSFetchedResultsControllerを作成する際に 下記コードのようにsectionNameKeyPathにEntityモデルのカラムを連結した値をセットして実行したら - (NSFetchedResultsController *)fetchedResultsController { if (_fetchedResultsC…

CoreDataのモデルファイル(.xcdatamodeld)の名前を変更する方法

モデルファイルを変更したくてハマった。 まず、before.sqlite → after.sqlite にリネーム。 次に、before.xcdatamodeld → after.xcdatamodeld にリネームしてビルドするとCoreDataに接続する処理で 'NSInvalidArgumentException', reason: 'Cannot create a…

CopyPNGFile Error

プロジェクトフォルダから要らない画像ファイルを削除して起動してみたところ CopyPNGFile /Users/.../xxx.png Command /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/copypng failed with exit code 1 という…

配列を降順にソートする方法

配列の昇順は簡単なんだけど降順になると色々とやり方があるので迷ったのだけど 普段からCoreDataを使用していたのでNSSortDescriptorを使った下記やり方が一番簡単に思えた。 NSSortDescriptor *sortDesc = [[[NSSortDescriptor alloc] initWithKey:@"" asc…

dispatch_asyncのバックグラウンド処理でUIをいじってはいけない

メインスレッドを止めないためにdispatch_asyncを使ってネットワーク処理をバックグラウンドで行っていた。 ネットワーク処理が完了次第メインスレッドでUIを変更するのが普通だが誤ってバックグラウンド側でUIをいじる処理を書いたら、 iPhone5 iOS6ではス…

UIWebViewで使用しているUIScrollViewを取得して表示コンテンツに対して色々やる方法

iOS5からUIWebView内のUIScrollViewを //webViewはUIWebViewのインスタンス [self.webView scrollView];で取得できるようになった。 しかしUIWebView内のUIScrollViewはreadonlyなので値を変えたりすることは出来ない。 なので自身でUIScrollViewを生成して…

nib but the view outlet was not set.

あるAクラス(A.xibセット)で使用するために新たにA2.xibファイルを生成して、A2.xibファイルのオーナーをAクラスに設定した。 これで1つのクラスから状況に応じて読み込むxibファイルを変更できると思い下記読み込みをすると A *a = [[A alloc] initWithNib…

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

UITableViewのtitleForHeaderInSectionでNSFetchedResultsControllerから対象のテーブルオブジェクト取得 - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { //Sessionsテーブルのオブジェクトの取得 _fetche…

キーボード表示すると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…