【问题标题】:saving NSMutable Array Data保存 NSMutableArray 数据
【发布时间】: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


【解决方案1】:

您需要查看以下调用:

applicationDidEnterBackground
applicationWillEnterForeground
applicationDidBecomeActive
applicationWillTerminate

都是UIApplication的方法。您的需求将决定上述哪些存储和恢复您的数据,具体取决于何时发生。

【讨论】:

  • 我把文件名从“Test App-Info.plist”改成“text.txt”,发现里面什么都没有写……我觉得不是正常,有什么建议吗?
猜你喜欢
  • 2010-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多