在第二个视图控制器中编辑UITableView中的文本

时间:2011-08-08 11:03:15

标签: iphone objective-c memory-management delegates

我有一个静态表视图(FirstViewController),有3行,每行都在各自的部分。前两个单元格中包含UITextFields,当用户点击它们或单元格时,它们是可编辑的。最后一个单元格有一个UILabel,当点击时会推送包含UITextField的SecondViewController。当用户按下时,UILabel的值需要是UITextField的值。

如果我在SecondViewController上创建一个委托属性(assign),它设置为FirstViewController,那么FirstViewController仍然会在内存中而不是nill有什么保证?据我所知,视图控制器不是最顶级的视图控制器(可见的控制器),它可以被解除分配。那么如果设备内存耗尽并释放FirstViewController会发生什么,然后当用户按下后返回方法将不会发送,因为delegate将为nil,之后将出现一个新的FirstViewController实例创建并弹出到屏幕上,而不从SecondViewController接收值。

我不想在AppDelegate中使用“全局”变量,因为我个人认为这有点混乱。

1 个答案:

答案 0 :(得分: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的情况下分配数据,这是一种很好的做法。