【问题标题】:Editing text in UITableView in second view controller在第二个视图控制器中编辑 UITableView 中的文本
【发布时间】:2011-08-08 11:03:14
【问题描述】:

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

如果我在设置为 FirstViewController 的 SecondViewController 上创建委托属性(分配),那么有什么保证 FirstViewController 仍将在内存中而不是空值?据我了解,一旦视图控制器不是最顶层的视图控制器(可见的),它就可以被释放。那么如果设备内存不足并释放 FirstViewController 会发生什么,那么当用户按下返回方法时将不会发送,因为 delegate 将为 nil,之后将创建一个新的 FirstViewController 实例并弹出到屏幕上,但没有收到来自 SecondViewController 的值。

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

【问题讨论】:

    标签: iphone objective-c memory-management delegates


    【解决方案1】:

    您可以创建一个 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 的情况下分配数据,这是一个很好的做法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-14
      • 1970-01-01
      • 1970-01-01
      • 2015-09-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多