0

(故事板图片) http://i.stack.imgur.com/DUZ12.png

有 3 个文本字段,用户在其中输入数据并保存。打开应用程序后,如果有任何保存数据,则会在文本字段中显示先前的输入。问题是,只有一组数据,而它需要是一个包含多人信息的数组。我想创建一个带有名称的单元格的导航控制器,并在单击它们时显示相关的联系信息。

视图控制器.h

   @interface ArchiveViewController : UIViewController
    @property (strong, nonatomic) IBOutlet UITextField *name;
    @property (strong, nonatomic) IBOutlet UITextField *address;
    @property (strong, nonatomic) IBOutlet UITextField *phone;
    @property (strong, nonatomic) NSString *dataFilePath;
    - (IBAction)saveData:(id)sender;
    @end

视图控制器.m

@interface ArchiveViewController ()

@end

@implementation ArchiveViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
 NSFileManager *filemgr;
 NSString *docsDir;
 NSArray *dirPaths;

 filemgr = [NSFileManager defaultManager];

 // Get the documents directory
 dirPaths = NSSearchPathForDirectoriesInDomains(
   NSDocumentDirectory, NSUserDomainMask, YES);

 docsDir = dirPaths[0];

 // Build the path to the data file
 _dataFilePath = [[NSString alloc] initWithString: [docsDir
        stringByAppendingPathComponent: @"data.archive"]];

 // Check if the file already exists
 if ([filemgr fileExistsAtPath: _dataFilePath])
 {
         NSMutableArray *dataArray;

         dataArray = [NSKeyedUnarchiver
          unarchiveObjectWithFile: _dataFilePath];

         _name.text = dataArray[0];
         _address.text = dataArray[1];
         _phone.text = dataArray[2];
 }

}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (IBAction)saveData:(id)sender {
     NSMutableArray *contactArray;

     contactArray = [[NSMutableArray alloc] init];
     [contactArray addObject:self.name.text];
     [contactArray addObject:self.address.text];
     [contactArray addObject:self.phone.text];
     [NSKeyedArchiver archiveRootObject: 
       contactArray toFile:_dataFilePath];

}
@end

感谢您的时间。

4

1 回答 1

0

与其拥有一个包含 3 个文本元素的数组并使用NSKeyedArchiver,不如拥有一个包含字典的数组并将其保存为writeToFile:atomically:。这将使用数组作为“条目”列表而不是字段列表,并将数据保存在 plist 而不是二进制文件中。

现在,当您在数组中读取时,您可以显示条目的表格视图(例如仅显示名称),然后当您显示存档视图时,您将向控制器传递适当的字典。

为了保存,最好使用委托将编辑传递回主控制器。但它也可以直接完成(需要详细控制器中的更多知识)或通过通知完成。

于 2013-07-20T21:34:16.030 回答