-2

我想问一下uitableview自定义单元格中的uiswitch。

如果我有保持表中每个 uiswitch 状态的数组,并在更改值事件上更新它。但是,每次我打开应用程序时,这些更改都不是持久性,它会重置为初始状态。我的问题是,每当我关闭它并再次重新打开它时,如何使更改在我的应用程序上持续存在?

这是我的更改值代码:

-(void)switchChanged:(UISwitch *)sender
{
    UITableViewCell *cell = (UITableViewCell *)[sender superview];
    NSIndexPath *x=[mainTableView indexPathForCell:cell];

    NSMutableArray *repl = [[NSMutableArray alloc] init];


    if (sender.on)
    {
        repl= [SwitchArray objectAtIndex:x.section] ;
        [repl replaceObjectAtIndex:x.row withObject:@"ON"];


    }
    else
    {
        //call the first array by section
        repl= [SwitchArray objectAtIndex:x.section] ;
        [repl replaceObjectAtIndex:x.row withObject:@"OFF"];

   }
}

这是 viewDidLoad 中数组的初始值:

for(int j=0 ; j < 30 ; j++)
                 [switchArray addObject:@"ON"];

提前致谢。感谢您的合作 这会让我很开心

4

1 回答 1

1

在应用程序的使用之间持久保存数组的一种简单方法是将数组写出到 pList。

为此,您需要一个存储文件的地方,请看以下示例:

- (NSURL *)switchArrayFilePath {

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];

    NSURL *filePath = [NSURL fileURLWithPath:[documentsDirectory stringByAppendingPathComponent:@"SwitchArray.plist"]];

    return filePath;
}

然后为了加载你的数组,你可以读回 pListviewDidLoad:例如:

self.switchArray = [[NSMutableArray alloc] initWithContentsOfURL:[self switchArrayFilePath]];

然后为了写出数据,你可以这样viewWillDisappear:

[self.switchArray writeToURL:[self switchArrayFilePath] atomically:YES];

在 iOS 上持久保存此类数据的其他方法是使用NSUserDefaults或使用 Core Data,但对于像这样简单的事情来说这会很复杂。

希望有帮助!

于 2013-04-12T21:41:29.947 回答