作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我写了一个应用程序,列出了一些书的标题、缩略图和二手价格。这一切都是使用 UITableView 完成的,数据是从 .plist 文件中获取的。
我想为每个单元格添加一个复选框,如果用户有书或没有书,可以切换该复选框,然后存储该复选框状态以供他们下次使用该应用程序时使用。是否可以将值存储回 .plist 文件或有其他方法吗?
这是我目前为单元格编写的代码:
@implementation ffbooksCell
@synthesize ffbooksLabel = _ffbooksLabel;
@synthesize priceLabel = _priceLabel;
@synthesize thumbnailImageView = _thumbnailImageView;
- (void) viewDidLoad {
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString* path = [documentsDirectory stringByAppendingPathComponent:@"ffbooks.plist"];
NSMutableArray* checkboxSelected = nil;
// Attempt to load saved data from the documents directory
if ([[NSFileManager defaultManager] fileExistsAtPath:path]){
checkboxSelected = [NSMutableArray arrayWithContentsOfFile:path];
}else{
// No saved data in documents directory so we need to load the data from the bundle
NSString* bundlePath = [[NSBundle mainBundle] pathForResource:@"ffbooks" ofType:@"plist"];
checkboxSelected = [NSMutableArray arrayWithContentsOfFile:bundlePath];
}
//...
// Toggle check box for book 0
if ([checkboxSelected[0][@"checkbox"] boolValue]){
checkboxSelected[0][@"checkbox"] = @NO;
}else{
checkboxSelected[0][@"checkbox"] = @YES;
}
// Note: @"checkbox" does not need to be in the original plist
//...
[checkboxSelected writeToFile:path atomically:YES];
if (checkboxSelected == 0){
[checkboxButton setSelected:NO];
} else {
[checkboxButton setSelected:YES];
}
}
- (IBAction)checkboxButton:(id)sender{
if (checkboxSelected == 0){
[checkboxButton setSelected:YES];
checkboxSelected = 1;
} else {
[checkboxButton setSelected:NO];
checkboxSelected = 0;
}
}
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialization code
}
return self;
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
@end
最佳答案
有很多方法可以将数据存储在 plist 中。核心数据将是我的选择。学习如何使用核心数据值得投入时间。您仍然可以使用 plist 来预填充您的数据库。
但是要回答您的问题,您可以将数据存储在 plist 中。假设初始数据存储在包中并且是字典数组,这里是一些示例代码。
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString* path = [documentsDirectory stringByAppendingPathComponent:@"books.plist"];
NSMutableArray* info = nil;
// Attempt to load saved data from the documents directory
if ([[NSFileManager defaultManager] fileExistsAtPath:path]){
info = [NSMutableArray arrayWithContentsOfFile:path];
}else{
// No saved data in documents directory so we need to load the data from the bundle
NSString* bundlePath = [[NSBundle mainBundle] pathForResource:@"books" ofType:@"plist"];
info = [NSMutableArray arrayWithContentsOfFile:bundlePath];
}
//...
// Toggle check box for book 0
if ([info[0][@"checkbox"] boolValue]){
info[0][@"checkbox"] = @NO;
}else{
info[0][@"checkbox"] = @YES;
}
// Note: @"checkbox" does not need to be in the original plist
[info writeToFile:path atomically:YES];
更新:我已经为你创建了一个要点来帮助你将数据加载到 TableView Controller 中 https://gist.github.com/datinc/9075686
关于ios - UITableView 单元格中的复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21859288/
我是一名优秀的程序员,十分优秀!