0

私は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;
}
4

1 に答える 1

0

それ以外の@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間のみオブジェクトを含めることができますBOOLsigned char

あなたはそのことを文字列または数字にボックス化することができます

[array addObject:@(tempTodo.done)]; //NSNumber
于 2013-03-26T15:29:39.433 に答える