保存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.doneBOOL ,它是一个原始类型signed char

你可以把那个东西打成字符串或数字

[array addObject:@(tempTodo.done)]; //NSNumber
链接地址: http://www.djcxy.com/p/44911.html

上一篇: Save TableView Data

下一篇: NSURLConnection sendSynchronousRequest with ARC