【发布时间】:2011-11-30 14:22:16
【问题描述】:
我有一个使用 NSMutableArray 填充的 UITableView。我正在使用 xcode 4.2
NSMutable 数组中的数据会在我切换应用程序时保留,但在以下两种情况下会被删除: 1-用户切换视图并返回。
2-应用程序完全关闭(即用户双击主按钮并将其从正在运行的应用程序列表中删除)
这是我正在使用的代码
-(NSString *)dataFilePath{
NSString *dataFilePath;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES);
NSString *documentDirectory = [paths objectAtIndex:0];
dataFilePath = [documentDirectory stringByAppendingPathComponent:@"Test App-Info.plist"];
return dataFilePath;
}
-(void)saveData{
[NSKeyedArchiver archiveRootObject:[data copy] toFile:[self dataFilePath]];
}
- (void)loadData
{
data = [NSKeyedUnarchiver unarchiveObjectWithFile:self.dataFilePath];
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
...
//saving the history
NSArray *archivedArray =[NSKeyedUnarchiver unarchiveObjectWithFile:[self dataFilePath]];
if (archivedArray == nil) {
data = [[NSMutableArray alloc] init];
}
else {
[self loadData];
[mainTableView reloadData];
}
}
如果我遗漏了什么,请告诉我
谢谢
编辑:
保存数据功能在两个位置加载: 1-我正在开发的应用程序扫描二维码,因此在以下函数中调用保存数据:
- (void) imagePickerController: (UIImagePickerController*) reader
didFinishPickingMediaWithInfo: (NSDictionary*) info
{
....
id<NSFastEnumeration> results =
[info objectForKey: ZBarReaderControllerResults];
ZBarSymbol *symbol = nil;
for(symbol in results){
// EXAMPLE: just grab the first barcode
break;
}
if(!symbol)
return;
// EXAMPLE: do something useful with the barcode data
theBarcodeString = symbol.data;
//adding the string to the list
[data addObject:theBarcodeString];
[self saveData];
[mainTableView reloadData];
[self endText];
stringLabel.text=theBarcodeString;
...
}
在编辑数据时也会调用它:
-(IBAction)editTable{
UIBarButtonItem *leftItem;
[mainTableView setEditing:!mainTableView.editing animated:YES];
if (mainTableView.editing) {
leftItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(editTable)];
}
else {
leftItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(editTable)];
}
[self saveData];
[mainTableView reloadData];
}
【问题讨论】:
-
那么您从哪里保存数据?
-
我可能是错的(我是 App developmentpment 的新手)但是根据代码,数据保存在 Test App-Info.plist(项目 plist)的 dataFilePath 中,应该将其更改为还有什么?
-
我的意思是你用什么方法调用你的 saveData 方法?
标签: iphone objective-c ios nsmutablearray xcode4.2