NSObject在ViewDidLoad和cellForRowAtIndexPath之间更改属性值

时间:2014-07-23 07:52:20

标签: ios objective-c core-data

我通过prepareForSegue方式将NSManagedObject传递给视图控制器。

我指定的对象在接收视图控制器中声明为:

@property (retain, nonatomic) Allowance *allowanceSchedule;

所述对象具有称为类型的属性,其是NSNumber。 当我将对象传递给接收视图控制器时,在发送视图控制器中将此属性设置为1.

在接收控制器中,在ViewDidLoad中,我可以确认此属性确实设置为1,但在cellForRowAtIndexPath中,该属性设置为0(其coredata默认值)。 在代码中没有其他点我设置此属性。任何帮助表示赞赏。

这里是cellForRowAtIndexPath代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

UITableViewCell *cell = [super tableView:tableView cellForRowAtIndexPath:indexPath];

if (indexPath.section == 0) { // Allowance type

    if (indexPath.row == [self.allowanceSchedule.type integerValue])
    {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    }
    else
    {
        cell.accessoryType = UITableViewCellAccessoryNone;
    }
}

if (indexPath.section == 1) { // Week starts on
    cell.detailTextLabel.text = [Time weekStartDescriptionFromIndex:[self.allowanceSchedule.weekStart integerValue]];
}

return cell;

}

在这里准备塞片:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqual: @"allowance"]) {
    AllowanceSetupTableViewController *allowanceViewController = (AllowanceSetupTableViewController *)segue.destinationViewController;
    allowanceViewController.delegate = self;

    if (self.child.allowanceSchedule == nil) {
        self.child.allowanceSchedule = [NSEntityDescription insertNewObjectForEntityForName:@"Allowance" inManagedObjectContext:self.managedObjectContext];
    }
    allowanceViewController.allowanceSchedule = self.child.allowanceSchedule;
}

}

1 个答案:

答案 0 :(得分:2)

我的猜测是你的对象在某个地方出现故障,或者你管理的ObjectContext正在失效。 CoreData会将调试消息吐出到您的控制台,仔细检查它并查看您是否有任何正在打印的内容。

检查您是否在其他线程上使用该对象,或意外进行了回滚。