2012-08-14 37 views
0

所以這裏是處理:我有一個名爲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; 
} 
+0

檢查'trackManager'的getter中發生了什麼。 – Mundi 2012-08-14 16:50:47

+0

@Mundi由於第一塊代碼屬於TrackManager.m,它訪問FieldForm.h的「@property(nonatomic,retain)TrackManager * trackManager;」線。實際上,fieldFormVC會在fieldFormVC.trackManager = self之前重置它的變量/值;叫做。 – user1443387 2012-08-14 17:05:42

+0

看起來很奇怪。如果'getForm'無論如何返回一個'FieldForm',爲什麼你必須轉換成'FieldForm'? – Mundi 2012-08-14 17:57:55

回答

0

您鑄造FieldForm雖然你的方法getForm實際上應該返回FieldForm類反正。最有可能的getForm方法不返回正確的對象。

+0

我發佈了[self getForm]的代碼。我有一個通用的WrapperForm對象(因爲輸入XML文件的設置方式),它具有FieldForm或PictureForm(但不是兩者)。因此該方法返回FieldForm或PictureForm。 – user1443387 2012-08-14 21:09:49

+0

你檢查過它確實返回了嗎? – Mundi 2012-08-14 21:54:39

+0

是的,我檢查了它,並返回一個內存地址不是0x00000000的對象。另外,我檢查瞭解析XML時是否將實際的PictureForm或FieldForm傳遞給了每個WrapperForm。問題是調試器完全通過initWith ..方法完成,然後返回對象並移至下一行。在下一行可以完成之前,fieldFormVC中變量的值被設置爲0x00000000。 – user1443387 2012-08-14 22:08:22