数時間の検索の後、私はシナリオ全体を把握しました。 ここにはいくつかの解決策があります。最初はもっと汚れています。なぜなら、これは最初に思いついたものですから、2番目の方がよりエレガントです。とにかく、私は両方とも一緒に去るつもりです。なぜなら、おそらく両方が誰かに便利になるからです。
S O L U T I O N - 私は解決策を把握するために一緒に作品を置くことができmit3zの助けに1つの
感謝。
彼が指摘するように、あなたがNSObjectの上のカテゴリに、このメソッドを実装することができます
- (NSArray *)c_propertyNames;
は(この部分のコードとそれについての更なる詳細は、彼の応答を見て)
これが与えます私そんなことをする自由:
- (void) addLocation {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"/Locations.plist"];
NSArray *keys = [curLocation c_propertyNames]; // retrieve all the keys for this obj
NSDictionary *values = [self.curLocation dictionaryWithValuesForKeys:keys];
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
for(NSString *key in keys) {
NSString *aaa = [NSString stringWithFormat:@"%@", (NSString *)[values valueForKey:key]];
[dict setValue:aaa forKey:key];
}
[dict writeToFile:path atomically:YES];
}
彼らはトンに書き込むことができるように、ループのsuperdumbがNSStringsにNSDictionaryの内のすべてのデータを変換するために必要とされます彼は困ったことのないファイルをplistします。辞書を作ってすぐにそれを保存しようとすると、あなたは成功しません。
このようにして、私はすべてのCLLocation objをdictに「シリアライズ」してplistファイルに書き込むことができます。
S O L U T I O N - 2
私はこれを行うには本当に最も簡単な(そしてよりエレガントな)方法を思いついた:NSCodingを使用。 ため、実際のCLLocationデータ型がNSCodingに準拠(私は気づいていること)、あなたがそのように、あなたの配列を記述したブロブを取得し、右側のplistにそれを保存するためにNSKeyedArchiverを介してデータアーカイバを呼び出すことができます。
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"/Locations.plist"];
NSMutableDictionary *data = [[NSMutableDictionary alloc] initWithContentsOfFile: path];
[data setValue:[NSKeyedArchiver archivedDataWithRootObject:arrayOfLocations] forKey:@"LocationList"];
[data writeToFile:path atomically:YES];
[data release];
およびvoila '。そのような単純な! :)あなたが簡単にあなたのデータを取り戻すことができます同じ原理に基づいて、
、 NSKeyUnarchiver
経由: self.arrayOfLocations = [[NSMutableArray alloc] initWithArray:[NSKeyedUnarchiver unarchiveObjectWithData: (NSData *)[dict objectForKey:@"LocationList"]]];
カテゴリコードはうまくいきます。「キー」NSArrayにデータが読み込まれますが、[dict writeToFile:path automatically:YES]を実行すると直ちに終了します。何もファイルに書かれていない。必要に応じて、質問を相対コードで更新しました。どうも! – holographix
ok私はもう少し実験をしましたが、NSDictionaryのkey "clientLocation"の要素を含めるとplistファイルには書き込まれません。そうでなければ魅力的に機能することがわかりました。これは、そのフィールドがかなりの文字数の文字列である可能性があります。<00000000 ffff0000 94092907 20413b40 6a5c4eeb 797455c0 a6f71fc4 7fde7d40 00000000 00000000 00000000 0000f0bf 00000000 0000f0bf 00000000 0000f0bf 00000000 0000f0bf 00000000 0000f0bf 00000000 0000f0bf 00000000 0000f0bf bc043f09 c140b541 64000000 00000000 00000040 00000000> – holographix
私はループを介してデータを解析するために謎解きを解決しなければなりませんでした。自分のコードをあなたのものと組み込んだ別のソリューションを投稿します。 – holographix