kubou.dev();

好きな言葉は一石二鳥

iPhoneアプリ/Objective-C

Xcode6でiOS8の実機でアーカイブすると、「Process launch failed: Security」

iOS8が載っているiPhone6PlusにてXcode6でアーカイブを試みると、「Process launch failed: Security」と表示され失敗した。 原因は、iPhone6Plusに古いプロビジョニングファイルが入っていたため。 以前使用していたiPhoneからデータを移行したため、プロビ…

XcodeのプロジェクトをコピーしてiOSアプリを複製する

1. Finderで oldディレクトリをコピーして、newにリネーム。 newディレクトリ内のold.xcodeprojを開く 2. Xcodeで 左ペインでPROJECTを選択。 右ペインのIdentity and Type > Nameをnewに変更。 変更の影響範囲を確認するダイアログが表示されるので、「Rena…

Storyboradが見つからない時の対処法

Xcode上でiPhoneシミュレータを起動すると、一瞬でアプリが落ちた。 エラーは以下のような内容。 'NSInvalidArgumentException', reason: 'Could not find a storyboard named 'Main' Main.storyboardが見つからないとのこと。 解決方法はstack overflowを参…

NSNotificationCenterの使い方

iOSアプリのさまざま状態を監視して、マッチしたときに通知できる「NSNotificationCenter」。 わざわざdelegateメソッドを使わなくてもいいから便利です。 よく使うのは以下の監視状態。 UIApplicationDidFinishLaunchingNotification : アプリケーションが…

addSubViewしたviewを最前面・最背面に移動する

最前面に移動する [self.view bringSubviewToFront:subView]; 再背面に移動する [self.view sendSubviewToBack:subView];

あるUIViewがすでにaddSubViewされているか判定したい

あるUIViewがすでにsuperViewにaddSubViewされていた場合に、これ以上addSubViewしたくない時は以下の判定文を書けばおk. if(![mySubView isDescendantOfView:superView]) { // 存在していない } else { // 存在している }

NSDictionaryの中身をループで取得したい

使うときにはいつも忘れているのでメモ。 keyとvalueが欲しいとき for (id key in dictionary){ NSLog(@"%@,%@", key, dictionary[key]); } valueが欲しいとき for (id value in [dictionary objectEnumerator]) { NSLog(@"%@", value); }

Objective-Cでfor文中に要素を変更しようとしたらエラー「Collection was mutated while being enumerated.」

列挙子を使ってアクセスしてる時に要素変更しないでねということ。 順番に処理してるのに、要素を削除したりしたら順番狂っちゃうから発生。 調べてみると、reverseObjectEnumeratorを使って逆順に列挙すればokみたい。 for (id obj in [array reverseObject…

SDWebImageを使用していたら、アーカイブだけエラー

SDWebImageを使用したiPhoneアプリで、シミュレータ・実機ともに正常に動作するのにアーカイブだけエラーが出るという現象に遭遇。 エラーはこんなの。 Unknown register name ‘q0′ in asm 調べてみると、if defined(ARM_NEON)という記述をif defined(_ARM_A…

UITableViewで余分な境界線を非表示にする。

UITableViewで2行だけデータを表示したいとき。 残りのcellには何もデータがないのに、境界線だけ表示されてしまってなんか気持ち悪い。 それを解決するのに一番簡単っぽい実装はこれ。 self.tableView.tableFooterView = [[UIView alloc] init];

JSONModelで必須でない項目を設定する - Objective-C

例えば、APIの返り値が「id=1, name=foo, address=bar」だった場合で、受け取り側には「id, name, address, age」が設定されていた場合。 Incoming data was invalid -- . Keys missing:age みたいなエラーが表示されます。 軽く調べたら、 @property (nonat…

NSDictionaryの配列からNSPredicateで検索するには。

NSDictionaryの配列からNSPredicateで検索するには。 ちなみに普通に文字列の配列だった場合は、以下のように書く。 NSArray *myArray = @[@"value1", @"value2", @"value3"]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains[c…

UITableViewCellを最初から選択状態にする

viewDidAppear内に下記を記述。 for (NSString *key in myArray) { // 仮にmyArrayに1から数値が入っていた場合は、[key intValue] - 1とするだけ。 NSIndexPath *indexPath=[NSIndexPath indexPathForRow:[key intValue] inSection:0]; [myTableView select…

NSDictionaryをforでまわすと順序が保証されない(高速列挙)

NSDictonaryをなんとなく高速列挙してたら、期待している通りの順番で返ってこなかったのでメモ。 // この書き方だと、順序が保証されない。1,2,3とは返ってこない。 for (id key in dictionary) { NSLog(@"%@", key); } NSArrayのsortedArrayUsingComparato…

symfony2のExceptionListenerでjsonを返却する。

symfony2を使っていて、自作したExceptionクラスを投げ、それをExceptionListenerで受け取ってjsonで返却しようとしたところsymfony2のエラー画面が表示されてしまった。 jsonで返却するために以下のようにコードを記述。 エンコード形式をおまかせする場合…

iOS7 - スクロールでステータスバーは残しつつ、ナビゲーションバーは隠す動きを実現。

Facebookアプリみたいに、下にスクロールするとナビゲーションバー「だけ」を隠したい。 少しハマったのでメモ。 #普通に実装してるとステータスバーまで消えてしまった。それは意図した動きではない。 こんな感じにしたい [caption id="attachment_219" al…

UIWebViewのロードが終わる前に戻るボタン押下で落ちる場合の対処法

UIWebView をリリースする前に delegate に nil を代入。 webView.delegate = nil;

iOS6でモーダルビューで落ちる。

"reason: 'A view can only be associated with at most one view controller at a time!" ・rootViewControllerに対して、1つのみviewが配置されている場合に起こりがち。 rootViewControllerを外して、view単体にすると治る。 [参考:stackOverFlow] http:…

ボタンをタップしてアクションシートを呼ぶ

-(void)tapShopRegist { UIActionSheet *as = [[UIActionSheet alloc] init]; as.delegate = self; as.title = @"タイトル"; [as addButtonWithTitle:@"選択肢1"]; [as addButtonWithTitle:@"選択肢2"]; [as addButtonWithTitle:@"キャンセル"]; as.cancel…

モーダルビューを閉じる方法(iOS5以降)

[self dismissViewControllerAnimated:YES completion:nil];

モーダルビューを取得する

UIViewController *viewController = [self.navigationController.viewControllers objectAtIndex:0]; NSString *modalClassName = NSStringFromClass([[viewController.modalViewController.childViewControllers objectAtIndex:0] class]);

UIImageViewにて、画像を自動リサイズ

self.contentMode = UIViewContentModeScaleAspectFill; self.clipsToBounds = YES; UIViewContentModeScaleToFillViewのサイズと画像のサイズが同じになります。 UIViewContentModeScaleAspectFitアスペクト比を維持したまま、画像のすべてが表示されるよう…

アラートの出し方

・ボタンを1つ表示する場合 -(void)hoge { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"完了" message:@"hogehoge" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alert show]; } ・ボタンを2つ表示する場合 UIAlertVi…

文字列の空文字判定

if (![str isEqualToString:@""] && ![str isKindOfClass:[NSNull class]]) { // 文字列が空でない場合 }

NSMutableArrayに配列を追加

[_sceneListModel addObjectsFromArray:model];

文字列の比較

[user.REPEATFLG isEqualToString:@"1"]

三項演算子

shopnameLabel.text = (shopModel.SHOPNAME != @"" && ![shopModel.SHOPNAME isKindOfClass:[NSNull class]])?shopModel.SHOPNAME:@"hogehoge店";

NSMutableArrayを別インスタンスにコピーする

NSMutableArray *newArray = [[NSMutableArray alloc] initWithArray:oldArray copyItems:YES];

NSStringの結合方法

NSString *object1 = [NSString stringWithCString:"ABC"]; NSString *object2 = [NSString stringWithCString:"DEF"]; NSString *object3 = [object1 stringByAppendingString:object2]; NSString *object4 = [NSString stringWithFormat:@"%@%@", object1,…

UINavigationControllerの戻るボタンを消す

UINavigationControllerの戻るボタンで、何も設定しないと前画面のタイトルが設定される。 この戻るボタンを表示しないようにするには以下のように設定する。 [self.navigationItem setHidesBackButton:YES]; viewDidLoadで呼び出す。