В контроллере addAlarm я объявляю строку NSString, как показано ниже,
NSString *nameOfAlarm; // in .h
@property (nonatomic, retain) NSString *nameOfAlarm; //in .h
@synthesize nameOfAlarm; //in .m
, а в ViewDidLoad я инициализирую ее следующим образом
nameOfAlarm = [[NSString alloc] initWithString:@"Alarm"];//In ViewDidLoad
, а затем выполняю что-то вродениже
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *CellIdentifier = [NSString stringWithFormat:@"Cell%d%d", indexPath.section, indexPath.row];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
}
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
// Configure the cell...
if (indexPath.section == 0) {
UISwitch *mySwitch = [[[UISwitch alloc] initWithFrame:CGRectZero] autorelease];
cell.accessoryView = mySwitch;
[(UISwitch *)cell.accessoryView setOn:YES]; // Or NO, obviously!
[(UISwitch *)cell.accessoryView addTarget:self action:@selector(mySelector:)
forControlEvents:UIControlEventValueChanged];
NSString *cellValue = [NSString stringWithFormat:@"Enable Alarm"];
cell.textLabel.text = cellValue;
//return cell;
}
if (indexPath.section == 1) {
if (indexPath.row == 0) {
NSString *cellValue = [NSString stringWithFormat:@"Name "];
cell.textLabel.text = cellValue;
NSString *cellValue2 = [NSString stringWithFormat:@"%@",(NSString*)nameOfAlarm];
cell.detailTextLabel.text = cellValue2;
}
, поэтому я делаю таблицу перезагрузки в ViewWillAppear, как показано ниже
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
NSLog(@"ViewWillAppear, The name is %@",nameOfAlarm);
[self.tableView reloadData];
}
Я пишу метод делегата, который вызывается другим контроллером следующим образом,
- (void) processName: (NSString *)n{
nameOfAlarm = (NSString *)n;
NSLog(@"Name is %@",nameOfAlarm);
}
Теперь, когда я нажимаю на 0 индекс строки, он переходит к контроллеру имен, просто, .h контроллера имен равен
#import <UIKit/UIKit.h>
@protocol ProcessNameDelegate <NSObject>
@required
- (void) processName: (NSString *)n;
@end
@interface Name : UITableViewController <UITextFieldDelegate>{
id <ProcessNameDelegate> delegate;
UITextField *name_textField;
}
@property (retain) id delegate;
@property (nonatomic, retain) UITextField *name_textField;
- (void)pressComplete;
@end
, а когда возвращается к предыдущему контроллеру, тогда вызываетсяследующий метод - ViewWillDisappear,
- (void)pressComplete {
NSString *name = (NSString *)name_textField.text;
[[self delegate] processName:name];
}
Это установит значение nameOfAlarm. Все хорошо, но когда я перезагружаюсь, это не отображается в
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
. Это показывает что-то вроде нижеесли я использую nameOfAlarm в значении ячейки или даже просто делаю NSLog,
<_UIStretchableImage: 0x14db10> //the first time in nameOfAlarm,
во второй раз, если я зайду в контроллер имен и сделаю это, то напечатает следующим образом
<UILabel: 0x1cd6c0; frame = (13 0; 25 27); text = 'ON'; clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1d75f0>>
или как этоs
<UILabel: 0x179ed0; frame = (101 0; 32 27); text = 'OFF'; clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x179f40>>
Я не могу получить проблему, потому что та же самая переменная работает, показывая правильные значения в других методах, но не работает хорошо с
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
Почему?