1

コードにカスタム オブジェクトの配列があります。

この配列をドキュメントフォルダのファイルに書きたいです。この回答では、iPhone - カスタム オブジェクトのアーカイブ配列で、このメソッドを実装する必要があることがわかりました。

- (void)encodeWithCoder:(NSCoder *)aCoder;
- (id)initWithCoder:(NSCoder *)aDecoder;

だから私はそれらを実装しました:

- (void)encodeWithCoder:(NSCoder *)encoder {
  [encoder encodeObject:self.data forKey:@"data"];
  [encoder encodeObject:self.nome forKey:@"nome"];
  [encoder encodeObject:self.celular forKey:@"celular"];
  [encoder encodeObject:self.endereco forKey:@"endereco"];
  [encoder encodeObject:self.horaConclusao forKey:@"horaConclusao"];
  [encoder encodeObject:self.horaAtendimento forKey:@"horaAtendimento"];
}

- (id)initWithCoder:(NSCoder *)decoder {
  self = [super init];
  if (self) {
    self.data = [decoder decodeObjectForKey:@"data"];
    self.nome = [decoder decodeObjectForKey:@"nome"];
    self.celular = [decoder decodeObjectForKey:@"celular"];
    self.endereco = [decoder decodeObjectForKey:@"endereco"];
    self.horaConclusao = [decoder decodeObjectForKey:@"horaConclusao"];
    self.horaAtendimento = [decoder decodeObjectForKey:@"horaAtendimento"];
  }

  return self;
}

私のコードでは、このメソッドを使用して書いています:

このコードは古いファイルを削除するためのものです

-(NSString *) plistHistoryFile {
  NSError *error;
  NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  NSString *documentsDirectory = [paths objectAtIndex:0];
  NSString *path = [documentsDirectory stringByAppendingPathComponent:[nameFile stringByAppendingPathExtension:@"plist"]];

  NSFileManager *filemgr = [NSFileManager defaultManager];
  if ([filemgr fileExistsAtPath:path]) {
    [filemgr removeItemAtPath:path error:&error];
  }

  return path;
}

そして、私はこのメソッドで書き込みを呼び出します:

-(void) writeArrayToHistoryFile:(NSArray *) array {
  NSString *path = [self plistHistoryFile];
  NSLog(@"%@", path);

  if ([array writeToFile:path atomically:NO]) {
    NSLog(@"YES");
  } else {
    NSLog(@"NO");
  }
}

しかし、ログに対する私の応答は常に NO です。何が間違っているのでしょうか?

4

1 に答える 1

0

エラーが何であるかを調べる必要がありますが、 を使用してエラーを取得することはできません-[NSArray writeToFile:atomically:]。代わりに、次のようにファイルを記述します。

NSError *error;

NSData *data = [NSPropertyListSerialization dataWithPropertyList:array
    format: NSPropertyListBinaryFormat_v1_0 options:0 error:&error];
if (!data) {
    NSLog(@"failed to convert array to data: %@", error);
    return;
}

if (![data writeToFile:path options:NSDataWritingAtomic error:&error]) {
    NSLog(@"failed to write data to file: %@", error);
    return;
}

NSLog(@"wrote data successfully");
于 2012-07-30T19:19:11.313 に答える