objective-c - ios 中的属性保留

标签 objective-c ios

好的简单问题,但找不到答案..

我需要将 View Controller 传递给类中的方法“saveinfo”,该方法在按下按钮时调用,如何使 View Controller 对“saveinfo”方法可见,以便我可以在那里使用它?

好的,我将添加整个类(class)。基本上我需要在按下按钮时获取文本字段信息。但我无法在 saveinfo 方法中访问 textFields 或 TableControll 变量。

@implementation Settings

- (id)init: (TableViewController*) TableControll {
  NSMutableArray *textFields = [[NSMutableArray alloc] initWithCapacity:5];
    UITextField *textField = nil;

    for (int i = 0; i < 3; i++) {
        textField = [[UITextField alloc] initWithFrame:CGRectMake(0.0f, 0.0f+(i*35), 120.0f, 30.0f)];
        textField.backgroundColor = [UIColor whiteColor];
        [textField setBorderStyle:(UITextBorderStyleRoundedRect)];
        [TableControll.view addSubview:textField];

        [textFields addObject:textField];
        [textField release]; textField = nil;
    }
    UITextField *textName = textFields[0];
    textName.placeholder = @"Vardas";

    UITextField *textNo = textFields[1];
    textNo.placeholder = @"Telefonas";
    textNo.keyboardType = UIKeyboardTypeNumberPad;
    UITextField *textPin = textFields[2];
    textPin.keyboardType = UIKeyboardTypeNumberPad;
    textPin.placeholder = @"Pin";

    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    button.frame = CGRectMake(150, 20, 160, 30);
    [button setTitle:@"Advanced settings" forState:UIControlStateNormal];
    [TableControll.view addSubview:button];
    UIButton *save = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    save.frame = CGRectMake(150, 60, 160, 30);
    [save setTitle:@"Save settings" forState:UIControlStateNormal];
    [TableControll.view addSubview:save];
    [button addTarget:self action:@selector(goAdvanced)
     forControlEvents:UIControlEventTouchUpInside];
    [save addTarget:self action:@selector(saveInfo)
     forControlEvents:UIControlEventTouchUpInside];

    return self;
}

-(void)goAdvanced {
    AppDelegate *newControll = (AppDelegate*)[UIApplication sharedApplication].delegate;
    [newControll ChangeController];
}

-(void)saveInfo {

    for(int i=0;i<5;i++) {
        UITextField *tempTxtField=[_textFields objectAtIndex:i];
        NSLog(@"do it %@",tempTxtField.text);
    }

}

@end

最佳答案

只需将 NSMutableArray 作为 ivar 添加到您的类中:

@implementation TableControll {
    NSMutableArray *_textFields;
}

- (id)init: (TableViewController*) tableControll {
    _textFields = [[NSMutableArray alloc] initWithCapacity:5];

    //init the textfields
    //and add it as subview
}

// skipping the rest of the implementation

-(void)saveInfo {
    for(int i=0;i<5;i++) {
        UITextField *tempTxtField=[_textFields objectAtIndex:i];
        NSLog(@"do it %@",tempTxtField.text);
    }                 
}  
@end

您应该检查是否可以重用 UITextFields 或每次都必须初始化 NSMutableArray。看来你没有使用ARC,但你不应该写类似 [textField release]; 的东西textField = nil;.您想要释放该对象以递减计数器,但不要将其设置为nil(dealloc 中除外)。

关于objective-c - ios 中的属性保留,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13051929/

相关文章:

iphone - 重新测试应用内购买

android - android和ios设备之间的数据传输

ios - 将 JSON 中的图像添加到 ScrollView Swift 4

iphone - 如何编写正确的只读属性?

ios - 使属于 UIView 子类的计时器无效

ios - 拖放 IBOutlet/IBAction 时, Storyboard编辑器在 xcode 上变为空白

ios - 如何在设备上的指定文件夹中构建和运行 ios 应用程序?

ios - 以编程方式打开一个新的 View Controller 给我一个黑屏

objective-c - (iOS) 为什么 AVAudioPlayer initWithContentsOfURL 总是失败,错误代码=-43

objective-c - 如何阻止ARC释放两次由2个线程共享的对象?