Редактирование текста в UITableView во втором контроллере представления - PullRequest
0 голосов
/ 08 августа 2011

У меня есть статическое табличное представление (FirstViewController), с 3 строками, каждая в своем собственном разделе. в первых двух ячейках есть поля UITextFields, которые можно редактировать, когда пользователь нажимает на них или ячейку. В последней ячейке есть UILabel, который при касании выдвигает SecondViewController, который содержит UITextField. Когда пользователь нажимает обратно, значение UILabel должно быть значением UITextField.

Если я создаю свойство делегата (assign) в SecondViewController, для которого установлено значение FirstViewController, какова гарантия того, что FirstViewController все еще будет в памяти, а не в нуле? Насколько я понимаю, как только контроллер представления не является самым верхним контроллером представления (видимым), он может быть освобожден. Итак, что произойдет, если устройству не хватит памяти и освободит FirstViewController, тогда, когда пользователь нажмет обратно, метод возврата не будет отправлен, так как delegate будет равен нулю, и после этого будет создан новый экземпляр FirstViewController и выскочил на экран, не получая значение от SecondViewController.

Я не хочу использовать «глобальную» переменную в AppDelegate, так как я лично считаю, что это немного грязно.

1 Ответ

0 голосов
/ 08 августа 2011

Вы можете создать класс данных, в котором вы можете установить свойства переменных или массивов (для отображения данных в 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, что является хорошей практикой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...