Xcode(3回目) [Xcode]


その前に、Dev Centerが提供するサンプルコードはよく見て確認しているのですが、それぞれピンポイントを突いた優れものです。今回のLocalizedMountainsは、いってみればplistの使い方と言っても過言ではないでしょう。記憶ではこの形式はObjective-C2.0から取り上げた形式で、一つずつ入力しないとコピーペーは出来ないようです。なので参考迄に入力方法の注意点を少々。

新規ファイルでリソースのProperty Listを選択すると、まずこんな形で出てきます。形式はXMLですが、表形式ですので、最新の形式と言えるでしょう(他のIDEは知りませんが)。


Plist.png

Rootの左脇にあるエンクロジャートライアングルボタンは下向きでなければ、アイテムの追加は出来ません。

タイプは、Array, Dictionary, Boolean, Data, Date, Number, Stringの7個しか有りません。これで事足りるからでしょう。右側の三本バーは、いろいろ追加できるマークで、これをクリックすれば、アイテムを追加できます。このマークはアイテムツリー以下であれば+に変わります。まあ、これは習うより慣れろです。

ではこれを読んでいる関数はと言うと、Mountains.mの中にある、

+ (Mountain *)mountainWithDictionary:(id)inputDictionary{…}です。

この中で、isKindOfClassobjectForKey とかはよく使うので、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があるので、選択すればファイルは出来ます。それで英語の部分を日本語に置き換えるだけです。さして難しい事でもないし例を見れば一目瞭然なので省略します。

ローカライズ.png


次に関数、- (NSArray*)sortedMountainsを追求してみます。この中にsortedArrayUsingDescriptorsと言うのがあり右クリックで調べて見ると、「定義へジャンプ」で、NSSortDescriptor.hの中に有り、

@interface NSArray (NSSortDescriptorSorting)


- (NSArray *)sortedArrayUsingDescriptors:(NSArray *)sortDescriptors;    // returns a new array by sorting the objects of the receiver


@end

とあります。こういった言い回しは日本人には厳しいのかも知れませんが、追々慣れる方法を考えたいと思います。直訳すれば「ディスクリプターを使ったソートされた配列」と言ったところでしょうか。

今回は取りあえず、間違うと度の位大変か参考になれば幸いです。では次回は次のサンプルに移ります。


タグ:XCode
nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

Xcode(2回目)Xcode(4回目) ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。