0

I'm trying to write my NSMutableArray to a text file. I looked at the data with NSLog before I write it, and it's in the format I want

String \t integer \t integer \t integer \r\n
String \t integer \t integer \t integer \r\n
... (50 lines like this)
String \t integer \t integer \t integer \r\n

I write the file by:

[NSKeyedArchiver archiveRootObject:myMutableArray toFile:newPath];

When I look at the file on disk however, it is a bunch of gibberish. Am I doing something wrong here? Or am I understanding how archiveRootObject:toFile: works incorrectly? Thanks.

4

3 に答える 3

0

ステップ1:カスタムオブジェクト(たとえばクラスオブジェクト)が使用されている場合

-(id) initWithCoder:(NSCoder *)aDecoder

-(void) encodeWithCoder:(NSCoder *)aCoder

カスタムクラスのメソッドであり、NSCodingプロトコルを使用する必要があります

ステップ2:.binファイルからデータを取得するため

NSFileManager * fm = [NSFileManager defaultManager];
NSURL * docsURL =[fm URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
// this will create the file yourFile.bin if it is not present    
NSString * path = [[docsURL path]stringByAppendingString:@"/yourFile.bin"];

self.yourArray = [NSKeyedUnarchiver unarchiveObjectWithFile:self.path];

ステップ3:データを.binファイルに保存する場合

NSFileManager * fm = [NSFileManager defaultManager];
NSURL * docsURL =[fm URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];

これは、存在する場合はファイルを使用し、そうでない場合はファイルを作成します

NSString * path = [[docsURL path]stringByAppendingString:@"/yourFile.bin"];

[NSKeyedArchiver archiveRootObject:self.recordedPlayers toFile:self.path]

それだけです、あなたのコードはファイルにデータを保存し、あなたがそれを要求したときにそれを取得することによって正しく機能するはずです...

これで問題が解決することを願っています

于 2012-05-14T22:59:31.553 に答える
0

ファイルはバイナリ形式で書かれているため、直接調べることはできません。読むには、再度ロードする必要があります。

ドキュメントの説明を参照してください。

于 2012-05-14T23:08:56.193 に答える
0

他の人が指摘したように、ファイルはバイナリ形式で書き込まれます。

ただし、調べることはできます。これはバイナリ plist であるため、.plist拡張機能に名前を付ける (または Finder で名前を変更する) だけで、Xcode で開くと、キー付きアーカイブの内容が表示されます。キーの構成はすぐにはわかりませんが、特定の値を探している場合は、通常、非常に簡単に検索/編集できます。

Xcode plist エディターのスクリーンショット

于 2012-10-05T16:06:03.087 に答える