Cocoaはさっぱり!!! version.X(10)at MAC
Cocoaはさっぱり!!! version.X(10) - 暇つぶし2ch918:名称未設定
08/10/16 00:33:11 yCQlP8sI0
>>917
ありがとうございます。オブジェクト定数で調べたら載っていました。

919:名称未設定
08/10/16 02:55:17 IxQHpoVP0
というかそれぐらい基本的なことはまず聞く前に過去ログを呼んだ方がいい

920:名称未設定
08/10/16 02:58:26 u4dOHZt50
おーい、過去ログーっ!

921:名称未設定
08/10/16 03:03:04 IxQHpoVP0
呼んで見つかったら次は読んでね

922:名称未設定
08/10/16 04:30:30 4acnW/Ie0
URLリンク(sankei.jp.msn.com)

923:名称未設定
08/10/16 05:09:11 dwqlPggA0
うまいねえ、これでインスタンスかい?

924:名称未設定
08/10/17 04:12:23 T8gpvSXs0
10/15 付けの新ドキュメントをざっとながめてたんだけど、
URLリンク(developer.apple.com)
ていう新 protocol がでてた。しかし
URLリンク(developer.apple.com)
との違いがほとんどわかりません。詳しい方よろすく

925:名称未設定
08/10/17 11:51:31 wwiyQt7f0
NSDictionaryをファイルに書き出す時に日本語文字列が
"\Uxxxx" のようにUnicodeの文字コードに変換されてしまうのを回避することはできないでしょうか?

PropertyListでなくてNSDictionaryのdescriptionInStringsFileFormatの形式で書き出したいのです。
NSStringやNSPropertyListSerializationを経由してどうにかならないかとやってみましたが解決できませんでした。
Property List Editor.appでファイルフォーマットをText Property Listにして書き出した場合も日本語は文字コードに変換されてしまうのでやっぱり無理なのでしょうか?

926:名称未設定
08/10/17 12:18:02 dwaA01i20
直接やる方法はわかりませんが、
単に NSDictionary のキーを keyEnumerator で列挙して、
それを徐々に NSMutableString かなにかにつなげていって、
ファイルに書き込みたい文字列をつくったら、
NSString の -writeToFile:atomically:encoding:error:
で書き込めばいいと思います。
encoding 指定は NSUTF8StringEncoding でいいと思います。

927:名称未設定
08/10/17 12:46:30 wwiyQt7f0
ありがとうございます
とりあえず今それでやっていますが辞書がいれごになって複雑になると大変ですね;
自前のdescriptionとしてカテゴリにしておこうかな
直接的に変換しない方法もあればよろしくお願いします

928:名称未設定
08/10/17 15:21:26 7NVYtTTJ0
>>925
たぶんプロパティリストのシリアライズと関係があると思うけど、
key = value; 型のものは旧式 (OPENSTEP由来)のもので、基本的にASCII。それが¥Uxxxxになる
理由だったと思う。
今はなるべくXML形式かバイナリ形式でシリアライズすることになっている。
ローカライズに使う.stringsファイルはちょっと例外的で、UTF-8/UTF-16をそのまま使えるけど。

ちなみに¥UxxxxというやつはNSNonLossyASCIIStringEncodingというエンコーディングとして
定義されているので、NSStringとかでこれを指定して読み込めば本来のUnicodeに戻る。

>とりあえず今それでやっていますが辞書がいれごになって複雑になると大変ですね;

リーフノードが規約かどうかで再帰コードでも書いたらいいだけだと思うけど。
そもそも入れ子(?)になってたら、stringsファイル形式では表現できないような。
あ、上で書いたいわゆるOPENSTEP形式のプロパティリストで入れ子にしたいということかな。

929:名称未設定
08/10/17 16:18:00 wwiyQt7f0
そうです、おっしゃる通りstringsファイル形式ではなくてNSPropertyListOpenStepFormat形式のプロパティリストファイルで、
かつ日本語表示させたいということでした。
説明していただいた文章を読むと、\Uxxxxはユニコードの文字コードがASCIIエンコーディングで表示されているということですかね。
そのあたり勘違いしていたようです。
複数のプログラム、プラットフォーム間でのデータのやり取りを想定しているので、プロパティリストではなく編集も容易なテキスト形式が好ましいかなと思い、かつ日本語表示もできるほうがいいよなと試行錯誤中でした。
XMLだと普通に日本語表示されるけど(PropertyListEditorなんかは除いて)テキスト編集が大変かなぁと、、
どうしたらいいのか分からなくなってきたのでもう一度やりとりするファイルの形式から考えなおしてみます。
Javaとか分かれば解決なんでしょうけどorz

930:名称未設定
08/10/17 19:47:10 wLdb94V30
>>924
単純に、NSTextInputを機能拡張したものが、NSTextInputClientなのでは?
NSTextInputは、インフォーマルではない普通のプロトコルなので、メソッドの追加や変更ができません。
そのため、新しいプロトコルが定義されたのではないかと思います。



931:名称未設定
08/10/18 00:52:35 BOpHtGbQ0
>>929
プロパティリストっていってもただのXMLだから大体の環境で読み込みとか問題なさそうな気がするけど違うのかな?
まあ、簡単に編集ができると言う部分はちょっとだけ微妙かもしれないか。

932:名称未設定
08/10/18 01:27:26 G97j1AaDP
DOM面倒だし、YAMLとかにしたほうがいいのかな

933:名称未設定
08/10/18 02:24:23 iCLvp6LK0
>>929
>そうです、おっしゃる通りstringsファイル形式ではなくてNSPropertyListOpenStepFormat形式のプロパティリストファイルで、
>かつ日本語表示させたいということでした。

というわけで、これ自体は、一旦OPENSTEP形式で書き出してからそれをNSStringに
NSNonLossyASCIIStringEncodingで読み込んで、最終的にUTF-8等で書き出し、でいいと思うけど。

クロスプラットフォームならむしろXML形式の方がいいと思うけどね.... Mac OS X以外の
環境でどういう処理をしたいのかによるけど。

934:名称未設定
08/10/18 03:46:52 IhdInhk50
xml のパーサは OS X以外のどの環境でも最近は標準で備わっていたり、オープンソースであったりするので、UTF8 + XML でデータをやりとりするのがかんたんだと思いますよ。

OpenStep 形式のファイルのパーサを OS X 以外の環境で自前で書くのは車輪の再発明で無駄だというのに同意。

935:925
08/10/18 05:35:50 Z6oi/mZ20
みなさんありがとうございます。
今回PCに詳しくない人でもなんとかテキストエディタで編集できるレベルでと考えてたこと、
またProperty List EditorなんかはDeveloperが入っていないといけないというのと、
自分がWinの方でのXMLの処理についての知識が浅かったということで、XML形式でなくOPENSTEP形式にこだわっていました。
昨晩は結局自前のdescriptionを書いて日本語表示をちまちま実装していましたが、力尽きて寝てしまい起きて>>933氏の書き込みを見てやり直してみたら一瞬でできました。
ちなみにプロパティリストの書き出し時に関してですが、NSPropertyListOpenStepFormatは読み込み時にしか使えないため以下のようにしました。

936:925
08/10/18 06:12:47 Z6oi/mZ20
カテゴリを実装
@implementation NSString (CardDocument)
- (NSString *)UnicodeString {
NSData *data = [self dataUsingEncoding:NSUTF8StringEncoding];
return [[[NSString alloc] initWithData:data encoding:NSNonLossyASCIIStringEncoding] autorelease];
}
@end

NSString *string = [[hogeDictionary descriptionInStringFileFormat] UnicodeString];
NSLog(string);
[string writeToFile:@"/Users/admin/Desktop/hoge.txt" atomically:NO encoding:NSUTF8StringEncoding error:nil];

これでplistとして読み可能な形でテキストファイルに日本語表示のまま保存することができました。
NSLogで確認できますが、辞書の中身がちゃんと日本語で表示されています。
もちろん辞書に対してdescriptionでもいいですが、今回はOPNESTEP形式にしたかったのでdescriptionInStringFileFormatを用いています。
辞書の中にNSDateが入っていると書き出したファイルを読み込みできなくなるのでNSDateはdescriptionWithLocaleなどしておく必要があります。
そうするとProperty List Editorで開いた時にNSDateではなくNSString扱いになってしまいますが、Porperty List Editorから書き出し時にフォーマットをText Property Listにした場合も同じようにNSDateはNSStringに変換されてしまうので仕方ないかと。

とりあえずこれはこれで良いとして、XMLを使う方向での可能性も探っていきたいと思います。みなさま御助言ありがとうございました。

937:名称未設定
08/10/18 08:05:10 jwVyMTzD0
カテゴリ内のメソッド名は UnicodeString とかいうめちゃくちゃ一般的な名前じゃなくて、
stringByInterpretingUnicodeEscapes
とかのほうがいいのでは ... 将来ソースコードみたときに判らんようになると思います。

938:名称未設定
08/10/18 08:15:39 iCLvp6LK0
>>936
あそうそう、OPENSTEP形式だとさらに、いくつかの種類のオブジェクトがちゃんと扱えないという
制限があったはず。ひょっとするとNSDateもそうかも。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch