Xcode(3回目) [Xcode]
その前に、Dev Centerが提供するサンプルコードはよく見て確認しているのですが、それぞれピンポイントを突いた優れものです。今回のLocalizedMountainsは、いってみればplistの使い方と言っても過言ではないでしょう。記憶ではこの形式はObjective-C2.0から取り上げた形式で、一つずつ入力しないとコピーペーは出来ないようです。なので参考迄に入力方法の注意点を少々。
新規ファイルでリソースのProperty Listを選択すると、まずこんな形で出てきます。形式はXMLですが、表形式ですので、最新の形式と言えるでしょう(他のIDEは知りませんが)。
Rootの左脇にあるエンクロジャートライアングルボタンは下向きでなければ、アイテムの追加は出来ません。
タイプは、Array, Dictionary, Boolean, Data, Date, Number, Stringの7個しか有りません。これで事足りるからでしょう。右側の三本バーは、いろいろ追加できるマークで、これをクリックすれば、アイテムを追加できます。このマークはアイテムツリー以下であれば+に変わります。まあ、これは習うより慣れろです。
ではこれを読んでいる関数はと言うと、Mountains.mの中にある、
+ (Mountain *)mountainWithDictionary:(id)inputDictionary{…}です。
この中で、isKindOfClass、objectForKey とかはよく使うので、option+ダブルクリックで調べてみましょう。
Abstract: Returns a Boolean value that indicates whether the receiver is an instance of given class or an instance of any class that inherits from that class. (required)
Declaration: - (BOOL)isKindOfClass:(Class)aClass
Parameters:
aClass: A class object representing the Objective-C class to be tested.
戻り値: YES if the receiver is an instance of aClass or an instance of any class that inherits from aClass, otherwise NO. と
Abstract: Returns the value associated with a given key.
Declaration: - (id)objectForKey:(id)aKey
Parameters:
aKey: The key for which to return the corresponding value.
戻り値: The value associated with aKey, or nil if no value is associated with aKey.と出て来ます。
格別意味は無いのですが、迷った時には調べています。
では、私が作ったアプリの何がまずかったのか、又は何が足りなかったのか先に進みましょう。
実はまだ作っていない物が有ります。Mountains.stringです。内容はこうです。
Mountains.strings |
/* A sentence with the mountain's name (first parameter), height (second parameter), and climbed date (third parameter) */ |
"sentenceFormat" = "%1$@ was first climbed on %3$@ and has a height of %2$@"; |
/* A sentence with the mountain's name (first parameter), and height (second parameter), but no climbed date */ |
"undatedSentenceFormat" = "%1$@ has a height of %2$@"; |
/* Use to express a height in meters */ |
"meterFormat" = "%@ meters"; |
/* Use to express a height in feet */ |
"footFormat" = "%@ feet"; |
取りあえずコンパイルすると、heightは表示され何メーターかは出て来ました。が、テキストフィールドには相変わらず出て来ません。つまり、sentenceFormatとundatedSentenceFormatは、表示されないようです。それにしても、%1$@とかどういう意味なのでしょうか(Root?)。分かりません。かくにも、コード自体はこれで良さそうなので、可笑しいのは、インターフェイスビルダーだけです。もう一度比べてみます。
有りました。コントローラーからテキストフィールドにsentenceTextのアウトレットを繋いでいないのが原因でした。
後はローカライズ化なのですが、main.xib, Mountains.plist, Mountains.stringsのファイルの情報を見るで、ローカリゼーションを追加のボタンを押せば、japaneseがあるので、選択すればファイルは出来ます。それで英語の部分を日本語に置き換えるだけです。さして難しい事でもないし例を見れば一目瞭然なので省略します。
次に関数、- (NSArray*)sortedMountainsを追求してみます。この中にsortedArrayUsingDescriptorsと言うのがあり右クリックで調べて見ると、「定義へジャンプ」で、NSSortDescriptor.hの中に有り、
@interface NSArray (NSSortDescriptorSorting)
- (NSArray *)sortedArrayUsingDescriptors:(NSArray *)sortDescriptors; // returns a new array by sorting the objects of the receiver
@end
とあります。こういった言い回しは日本人には厳しいのかも知れませんが、追々慣れる方法を考えたいと思います。直訳すれば「ディスクリプターを使ったソートされた配列」と言ったところでしょうか。
今回は取りあえず、間違うと度の位大変か参考になれば幸いです。では次回は次のサンプルに移ります。
コメント 0