所以這裏是處理:我有一個名爲FieldFormVC的自定義UIViewController。爲了表示它,我稱之爲代碼:ViewController在自定義初始化後丟失數據
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對象。 andManagedObjectContext:爲initWithFieldForm代碼的方法是:
-(id)initWithFieldForm: (FieldForm *) f andManagedObjectContext: (NSManagedObjectContext *) moc
{
if (self = [super init])
{
fieldForm = f;
managedObjectContext = moc;
}
return self;
}
我設置了一些斷點,當initWithFieldForm:andManagedObjectContext:被調用,參數「F」和「交通部」包含實際值。在該方法結束時,fieldFormVC具有它所需的所有值。現在
時,它可以追溯到第一個代碼塊,並呼籲
fieldFormVC.trackManager = self;
所有fieldFormVC價值觀去爲0x00000000。 fieldFormVC的所有屬性都使用@property(nonatomic,retain)進行設置,並且它們也是@ 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 2012-08-14 16:50:47
@Mundi由於第一塊代碼屬於TrackManager.m,它訪問FieldForm.h的「@property(nonatomic,retain)TrackManager * trackManager;」線。實際上,fieldFormVC會在fieldFormVC.trackManager = self之前重置它的變量/值;叫做。 – user1443387 2012-08-14 17:05:42
看起來很奇怪。如果'getForm'無論如何返回一個'FieldForm',爲什麼你必須轉換成'FieldForm'? – Mundi 2012-08-14 17:57:55