保存TableView数据
我做了tableview保存和加载数据。 我有2个警告和2个错误。
错误:
'NSString * __ strong'指向'BOOL'(又名'signed char')的整数转换不兼容指针
'BOOL'(又名'signed char')到'id'的隐式转换不允许使用ARC
将'BOOL'(又名'signed char')发送到类型为'id'的参数的指针转换不兼容的整数
我的错在哪里? 我该如何解决?
Task.h
#import <Foundation/Foundation.h>
@interface Task : NSObject
@property (nonatomic,strong) NSString *name;
@property (nonatomic,assign) BOOL done;
-(id)initWithName:(NSString *)name done:(BOOL)done;
@end
Task.m
#import "Task.h"
@implementation Task
@synthesize name = _name;
@synthesize done = _done;
-(id)initWithName:(NSString *)name done:(BOOL)done {
self = [super init];
if (self) {
self.name = name;
self.done = done;
}
return self;
}
我的保存和加载代码
- (void)applicationDidEnterBackground:(NSNotification *)notification {
NSLog(@"Entering Background");
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
// paths[0];
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *plistPath = [documentsDirectory stringByAppendingPathComponent:@"data.plist"];
//NSArray *keys = [[NSArray alloc] initWithObjects:@"task", nil];
NSMutableArray *array = [[NSMutableArray alloc] init];
NSEnumerator *enumerator = [_tasks objectEnumerator];
Task *tempTodo;
while ( tempTodo = [enumerator nextObject])
{
[array addObject:tempTodo.name];
[array addObject:tempTodo.done]; //Eror is here..
}
[array writeToFile:plistPath atomically:YES];
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.tasks = [[NSMutableArray alloc] init];
UIApplication *app = [UIApplication sharedApplication];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidEnterBackground:) name:UIApplicationDidEnterBackgroundNotification object:app];
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
// paths[0];
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *plistPath = [documentsDirectory stringByAppendingPathComponent:@"data.plist"];
if ([fileManager fileExistsAtPath:plistPath] == YES)
{
NSMutableArray *readArray = [NSMutableArray arrayWithContentsOfFile:plistPath];
_tasks = [[NSMutableArray alloc] init];
NSEnumerator *enumerator = [readArray objectEnumerator];
NSString *str = [[NSString alloc] init];
while ( str = [enumerator nextObject])
{
Task *tempTodo = [[Task alloc] init];
tempTodo.name = str;
str = [enumerator nextObject];
tempTodo.done = str; //Error and warning is here.
[_tasks addObject:tempTodo];
}
[[self tableView] reloadData];
}
}
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"AddTaskSegue"]) {
UINavigationController *navCon = segue.destinationViewController;
AddTaskViewController *addTaskViewController = [navCon.viewControllers objectAtIndex:0];
addTaskViewController.taskListViewController = self;
} else if ([segue.identifier isEqualToString:@"EditDoneTaskSegue"] || [segue.identifier isEqualToString:@"EditNotDoneTaskSegue"]) {
EditTaskViewController *edit =segue.destinationViewController;
edit.task = [self.tasks objectAtIndex:self.tableView.indexPathForSelectedRow.row];
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *NotDoneCellIdentifier = @"NotDoneTaskCell";
static NSString *DoneCellIdentifier = @"DoneTaskCell";
Task *currentTask = [self.tasks objectAtIndex:indexPath.row];
NSString *cellIdentifier = currentTask.done ? DoneCellIdentifier : NotDoneCellIdentifier;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
// Configure the cell...
cell.textLabel.text = currentTask.name;
return cell;
}
而不是@property (nonatomic,assign) BOOL done;
使用
@property BOOL done;
也,
NSString *str = [[NSString alloc] init];
while ( str = [enumerator nextObject])
{
Task *tempTodo = [[Task alloc] init];
tempTodo.name = str;
str = [enumerator nextObject];
tempTodo.done = str; //Error and warning is here.
这里str
是字符串,并将其分配给BOOL
。
和
while ( tempTodo = [enumerator nextObject])
{
[array addObject:tempTodo.name];
[array addObject:tempTodo.done]; //Eror is here..
}
NSArray
只能包含对象,而tempTodo.done
是BOOL
,它是一个原始类型signed char
你可以把那个东西打成字符串或数字
[array addObject:@(tempTodo.done)]; //NSNumber
链接地址: http://www.djcxy.com/p/44911.html
上一篇: Save TableView Data