2011-08-08 43 views
0

我有一個靜態表視圖(FirstViewController),有3行,每個都在它們自己的部分。前兩個單元格中有UITextFields,當用戶點擊它們或單元格時,這些單元格是可編輯的。最後一個單元格有一個UILabel,當它點擊時會推送包含UITextField的SecondViewController。當用戶按回時,UILabel的值需要是UITextField的值。編輯第二視圖控制器中的UITableView中的文本

如果我在SecondViewController上創建了一個委託屬性(assign),該屬性設置爲FirstViewController,那麼FirstViewController仍然會在內存中而不是nill上有什麼保證?據我瞭解,儘快視圖控制器不是最頂層的視圖控制器(可見的),它可以被釋放。那麼如果設備內存不足,會發生什麼情況,並且釋放FirstViewController,然後當用戶按下返回方法將不會被髮送,因爲delegate將爲零,之後將創建一個新的FirstViewController實例並彈出到該屏幕沒有接收到來自SecondViewController的值。

我不想在AppDelegate中使用「全局」變量,因爲我個人認爲這有點麻煩。

回答

0

您可以創建一個Data類,您可以在其中設置變量或數組的屬性(用於在UITableView中顯示數據)。在數據類中實現一個類方法,用於檢查對象是否被實例化。如果不是,它就是這樣。它是這樣的:

//DataClass.h  

@interface DataClass : NSObject { 

NSMutableArray *nameArray; 
NSMutableArray *placeArray;  

} 
@property(nonatomic,retain)NSMutableArray *nameArray; 
@property(nonatomic,retain)NSMutableArray *placeArray; 
+(DataClass*)getInstance; 
@end 


//DataClass.m 
@implementation DataClass 
@synthesize nameArray; 
@synthesize placeArray; 
static DataClass *instance =nil; 
+(DataClass *)getInstance 
{ 
    @synchronized(self) 
    { 
     if(instance==nil) 
     { 

      instance= [DataClass new]; 
     } 
    } 
    return instance; 
} 

現在在您的視圖控制器,你需要調用此方法爲:

DataClass *obj=[DataClass getInstance]; 

和使用數組。 這樣你就可以分配數據而不會打擾AppDelegate,這是一個很好的做法。

相關問題