(故事板图片) http://i.stack.imgur.com/DUZ12.png
有3个文本字段,用户输入数据并保存。打开应用程序后,如果有任何保存数据,则先前的输入将显示在文本字段中。问题是,只有一组数据,而它需要是一个包含多个人信息的数组。我想创建一个带有名称单元格的导航控制器,点击它们后会显示相关的联系信息。
viewcontroller.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
viewcontroller.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
感谢您的时间。
答案 0 :(得分:0)
不是使用包含3个文本元素的数组并使用NSKeyedArchiver
,而是使用包含字典的数组并使用writeToFile:atomically:
保存它。这将使用数组作为“条目”列表而不是字段列表,并将数据保存在plist而不是二进制文件中。
现在,当您在数组中读取时,您可以显示条目的表格视图(仅显示名称),然后在显示存档视图时,您将向控制器传递相应的字典。
对于保存,最好使用委托将编辑传递回主控制器。但它也可以直接完成(需要在细节控制器中获得更多知识)或通过通知。