关闭并重新打开应用程序时uiswitch在uitableview持久性?

时间:2013-04-12 21:18:29

标签: ios objective-c uitableview uiswitch

我想在uitableview自定义单元格中询问uiswitch。

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

这是我的更改值代码:

-(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"];

提前致谢。我感谢你的合作这会让我感到高兴

1 个答案:

答案 0 :(得分: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;
}

然后,为了加载你的数组,你可以在viewDidLoad:中读回pList,例如:

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

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

中这样做
[self.switchArray writeToURL:[self switchArrayFilePath] atomically:YES];

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

希望有所帮助!