Core data ViewController在自定义初始化后丢失数据

Core data ViewController在自定义初始化后丢失数据,core-data,viewcontroller,init,Core Data,Viewcontroller,Init,这里有一个交易:我有一个名为FieldFormVC的自定义UIViewController。为了呈现它,我将此代码称为: FieldFormVC *fieldFormVC = [[FieldFormVC alloc] initWithFieldForm:(FieldForm *)[self getForm] andManagedObjectContext: managedObjectContext]; fieldFormVC.trackManager = self; fieldFormVC.t

这里有一个交易:我有一个名为FieldFormVC的自定义UIViewController。为了呈现它,我将此代码称为:

FieldFormVC *fieldFormVC = [[FieldFormVC alloc] initWithFieldForm:(FieldForm *)[self getForm] andManagedObjectContext: managedObjectContext];
fieldFormVC.trackManager = self;

fieldFormVC.thisTrackNumber = currentScreenIndex;
fieldFormVC.textSize = textSize;

[navigationController pushViewController:fieldFormVC animated:YES];
其中[self getForm]返回一个FieldForm对象。initWithFieldForm:和ManagedObjectContext:方法的代码为:

-(id)initWithFieldForm: (FieldForm *) f  andManagedObjectContext: (NSManagedObjectContext *) moc
{
    if (self = [super init])
    {
        fieldForm = f;
        managedObjectContext = moc;
    }

    return self;

}
我设置了一些断点,当调用initWithFieldForm:和ManagedObjectContext:时,参数“f”和“moc”包含实际值。在方法的末尾,fieldFormVC具有它所需的所有值

现在,当它返回到第一段代码和调用时

fieldFormVC.trackManager = self;
fieldFormVC中的所有值都变为0x00000000。fieldFormVC的所有属性都设置为@property(非原子,保留),并且它们也是@Synthetic'd

奇怪的是我用了类似的句型。。方法已经证明是很好的,我以前从未见过这个问题。如果有帮助的话,我在我的项目中使用核心数据,FieldForm是我模型中的某个实体。谢谢你的建议和帮助

更新:

getForm方法的代码:

-(NSObject *) getForm
   {
    WrapperForm *wrapperForm = (WrapperForm *)[[_fetchedResultsController fetchedObjects]objectAtIndex:currentScreenIndex.intValue];

    FieldForm *fieldForm = wrapperForm.fieldForm;
    PictureForm *pictureForm = wrapperForm.pictureForm;


    if (fieldForm != nil)
    {
        NSLog(@"Class: %@", [wrapperForm.fieldForm.class description]);

        return fieldForm;

    }else if(pictureForm != nil)
    {
        NSLog(@"Class: %@", [wrapperForm.pictureForm.class description]);

        return pictureForm;
    }

    return nil;
}

虽然您的方法
getForm
实际上应该返回一个
FieldForm
类,但是您正在强制转换到
FieldForm
。很可能
getForm
方法没有返回正确的对象

检查
trackManager
@Mundi的getter中发生了什么,因为第一段代码属于trackManager.m,它访问FieldForm.h的“@property(nonatomic,retain)trackManager*trackManager;”行。事实上,fieldFormVC在fieldFormVC.trackManager=self之前重置其变量/值;它被称为。它看起来很奇怪。如果
getForm
返回的是
FieldForm
,为什么要强制转换到
FieldForm
?我发布了[self-getForm]的代码。我有一个通用的WrapperForm对象(因为输入XML文件的设置方式),它有一个FieldForm或PictureForm(但不是两者都有)。因此,该方法返回FieldForm或PictureForm。您是否检查过它是否确实返回一个?是的,我检查过,它返回一个内存地址不是0x00000000的对象。此外,我还检查以确保在解析XML时将实际的PictureForm或FieldForm传递到每个包装器表单中。问题是调试器会一直通过initWith。。方法,然后返回对象并转到下一行。在完成下一行之前,fieldFormVC中变量的值被设置为0x00000000。您的初始化过程似乎仍然存在问题。尝试
[[FieldForm alloc]init]并逐个添加属性。