0

当我滑动我的 UITableViewCell (其对象来自核心数据)时,它将单元格的对象设置为“读取”(在代码中:isRead变为YES)。

这是这样完成的:

- (void)swipedToMarkCellRead:(Article *)article {
     if ([article.isRead isEqualToNumber:@YES]) {
          article.isRead = @NO;
     }
     else {
          article.isRead = @YES;
     }

     NSManagedObjectContext *context = self.managedObjectContext;
     NSError *error;
     [context save:&error];
}

但是,下一次应用加载文章时,它又回到未读状态(或isRead等于NO)。我isRead在 Core Data 中创建了一个瞬态属性,因此每当它被访问时,我都可以对其进行操作,并且我可以这样操作它:

- (NSNumber *)isRead {
    [self willAccessValueForKey:@"isRead"];
    NSNumber *isRead = [self primitiveValueForKey:@"isRead"];
    [self didAccessValueForKey:@"isRead"];

    // If at 100% progress (finished) or it's already marked as read
    if ([self.progress intValue] >= 1 || [isRead boolValue]) {
        isRead = @YES;
    }
    else {
        isRead = @NO;
    }

    return isRead;
}

这是否令人困惑?我看不出是什么导致了这种变化。

4

1 回答 1

6

很简单,瞬态属性不会持久存储。它们永远不会写入数据库,这就是它们默认返回NO.

“瞬态属性是您定义为模型一部分的属性,但不会作为实体实例数据的一部分保存到持久存储中。”

于 2013-11-04T22:42:00.000 回答