iOS – CoreDataにおける検索条件のエスケープ

CoreDataで以下のコードでtargetNameに該当するデータを検索する場合、targetNameにシングルクォート「'」が含まれていると、シングルクォートの「囲み」の整合性が取れなくなるので、アプリが落ちます。

NSString *searchCondition = [NSString stringWithFormat:@"name = '%@'", targetName];
NSPredicate *predicate = [NSPredicate predicateWithFormat:searchCondition];
[fetchRequest setPredicate:predicate];

このような場合はtargetNameに含まれているシングルクォートを以下のようにして事前にエスケープしておけば大丈夫です。

targetName = [targetName stringByReplacingOccurrencesOfString:@"'" withString:@"\\'"]

 

 

Objective-Cでよく使うけと忘れてしまいがちなテクニックたち

このメモにはObjective-Cでよく(?)使うけど毎回忘れてしまい、Google検索するところから始めなければならないようなテクニックたちを載せておきます。

 

文字列を置換する

NSStringのstringByReplacingOccurrencesOfStringメソッドを使います。

NSString *result = [targetString stringByReplacingOccurrencesOfString:@"置換対象文字列" withString:"新しく置き換える文字列"];

 

文字列を結合する

いろいろやり方があります。まずは一番単純なものを。

NSString newString = [stringA stringByAppendingString:stringB];

 

double型を文字列に変換する

一度NSNumberにするところがポイントです。

double d = 1.234;
NSString *str = [[NSNumber numberWithDouble:d] stringValue];

 

NSFetchedResultsControllerによってフェッチされたNSManagedObjectを取得する

NSArray *objects = [self.fetchedResultsController fetchedObjects];

 

配列の最後の要素を取得する

NSArray *objects = @[@"A", @"B", @"C"];
NSString *last = [objects lastObject];

 

 

 

バージョンアップしたアプリをApp Storeに申請する方法

既にApp Storeに登録されてるアプリを改良して、新しいバージョンとしてApp Storeに載せたい場合は、バージョンアップしたことを申請する必要があります。申請方法は新たにアプリを登録するよりもはるかに簡単ですが、知らないと戸惑うこともあるので、メモとして残しておきます。

 

iTunes Connectで新バージョンを申請

まず、iTunes Connectにサインインし、[Manage Your Apps]の画面に行き、その画面からバージョンアップしたいアプリを選択します。

アプリを選択すると画面下部に現在のバージョンのアプリの情報と、その右に"Add Version"と表記されたボタンが表示されているので、このAdd Versionボタンを押します。

where_is_add_version

そうすると、いろいろな質問が画面に表示されますので答えていきます。そして以下のようなバージョン番号バージョンアップ内容を記述する画面が出てくるので、それぞれの言語ごとにバージョンアップ内容を記述してください。

new_version_apply

最後まで行くと、バージョンアップ前(つまり現在バージョン)のアプリの情報が引き継がれた新しいバージョンのアプリ情報が作成されます。変更点があればアプリ情報を修正し、同画面の右上にある"Ready To Upload Binary”ボタンを押します。これでiTunes Connectでの作業は完了です。

 

XCodeで新バージョンのアプリをApp Storeに送信する

次はXCode上での作業です。プロジェクト内にある"[ターゲット名]-info.plist"を開きます。このファイルの2つの項目"Bundle version"と"Bundle versions string, short"にそれぞれ先ほどiTunes Connectで申請した新しいバージョン番号を以下のように入力します。

change_app_version

後はアプリ申請時同様、このバージョンのArchiveを作成し、Organizer経由でApp Storeに新しいバージョンのアプリを送信して完了です。このあたりの手順については以前の記事「App Storeへのアプリの登録手順」を参考にしてください。

 

環境

XCode 4.6.2

 

iOS – Navigation itemの「戻る」ボタンの表示を変更する方法

Snip20130221_2

ナビゲーションバー上のボタンに表示される「戻る」ボタンのラベル名を変更する方法を紹介します。

ポイントは、push元のNavigation itemにラベル名を設定することです。

下図のような「新規作成」画面と「カテゴリ」画面がある場合を例に取って解説します。カテゴリ画面へは新規作成画面からpush方式で画面遷移をするとします。

Snip20130221_3

上図のようにセグエを設定した場合は、デフォルトで遷移元の画面に戻るためのボタンが表示されるのですが、そのボタンのラベル名が遷移元の画面のタイトルになっているとおもいます。そのボタンのタイトルを変更する場合、Navigation item(ナビゲーションバー)を選択して、画面右側のAttributes inspectorに表示される「Back Button」にボタンに表示したい文字列を入力すればよいのですが、上記のカテゴリ画面のNavigation itemのBack Buttonに値を設定しても反映されません。カテゴリ画面ではなく、新規作成画面、つまり遷移元の親画面のBack Buttonにその値を設定することで戻るボタンにその値が表示されます