【发布时间】:2012-08-14 16:07:40
【问题描述】:
这就是交易:我有一个名为 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: andManagedObjectContext: 方法的代码是:
-(id)initWithFieldForm: (FieldForm *) f andManagedObjectContext: (NSManagedObjectContext *) moc
{
if (self = [super init])
{
fieldForm = f;
managedObjectContext = moc;
}
return self;
}
我设置了一些断点,当调用 initWithFieldForm: andManagedObjectContext: 时,参数“f”和“moc”包含实际值。在方法结束时,fieldFormVC 拥有它需要的所有值。
现在当它回到第一块代码并调用时
fieldFormVC.trackManager = self;
fieldFormVC 中的所有值都指向 0x00000000。 fieldFormVC 的所有属性都使用@property(非原子,保留)设置,并且它们也是@synthesize'd。
奇怪的是,我使用了类似的 initWith.. 方法,结果非常好,而且我以前从未见过这个问题。如果有帮助,我将在我的项目中使用 Core Data,而 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;
}
【问题讨论】:
-
检查
trackManager的getter中发生了什么。 -
@Mundi 好吧,因为第一块代码属于 TrackManager.m,它访问 FieldForm.h 的“@property (nonatomic, retain) TrackManager *trackManager;”线。事实上, fieldFormVC 在 fieldFormVC.trackManager = self; 之前重置了它的变量/值。被调用。
-
看起来很奇怪。如果
getForm无论如何都返回FieldForm,为什么你必须转换为FieldForm?
标签: core-data viewcontroller init