Objective-C Iphone, как установить значение по умолчанию для свойства - PullRequest
14 голосов
/ 28 апреля 2009

Привет, у меня есть следующий код в ViewController.h:

#import <UIKit/UIKit.h>

@interface CalcViewController : UIViewController {
    NSNumber* result;
    NSString* input;
    //NSString* input = @"";

    IBOutlet UITextField* display;
}

@property (retain) NSNumber* result;
@property (retain) NSString* input;
@property (nonatomic, retain) UITextField* display;

@end

Проблема в том, что я хочу добавить строку для ввода, но это невозможно, когда она все еще нулевая. Вот почему я хочу установить значение ввода по умолчанию равным @ "". Но куда мне поместить этот код?

Мне известно об одном возможном решении, когда вы помещаете его в конструктор по умолчанию. Но я не знаю, в каком файле это положить. И откуда я должен это назвать.

К сожалению, я получил лишь ограниченное понимание C и понимаю, что, возможно, файл .h - не то место.

Если вам это нужно, тип проекта - приложение на основе представления.

Надеюсь, вы можете помочь.

Ответы [ 4 ]

16 голосов
/ 28 апреля 2009

Может оказаться полезным прочитать некоторую документацию по Objective-C или какао. Вероятно, вы найдете несколько полезных советов по материалам для чтения, если выполните поиск здесь, в StackOverflow или в Google.

Чтобы ответить на ваш вопрос, у вас должно быть @implementation CalcViewController. Чаще всего этот @implementation помещают в файл * .m. Если ваш * .h файл называется «ViewController.h», то реализация будет идти в «ViewController.m».

Затем вы должны создать копию функции инициализации UIViewController и поместить ее туда (я не знаю, что такое функция инициализации по умолчанию).

Например:

@implementation CalcViewController

@synthesize result;
@synthesize input;

- (id)initWithNibName:(NSString*)aNibName bundle:(NSBundle*)aBundle
{
    self = [super initWithNibName:aNibName bundle:aBundle]; // The UIViewController's version of init
    if (self) {
        input = [[NSString alloc] initWithString:@""]; // You should create a new string as you'll want to release this in your dealloc
    }
    return self;
}

- (void)dealloc
{
    [input release];
    [super dealloc];
}
@end // end of the @implementation of CalcViewController

ПРИМЕЧАНИЯ:

  • Возможно, вы захотите переименовать файл в CalcViewController. Я полагаю, что движку рефакторинга Xcode легче иметь дело.
  • Вам не нужно объявлять @property для переменной экземпляра дисплея, когда вы соединяете это с Interface Builder. Если вы не хотите, чтобы клиенты CalcViewController часто меняли его

РЕДАКТИРОВАТЬ: 28 апреля 2009 года: 10:20 EST: я предлагаю на самом деле выделить NSString, как вы должны технически выпустить его в dealloc.

РЕДАКТИРОВАТЬ: 28 апреля 2009 года: 11:11 EST: я обновил @implementation для использования версии init UIViewController.

9 голосов
/ 21 марта 2012

Очень хороший вопрос. Краткий ответ - инициализировать значения в функции init. Необходимо перезаписать функцию инициализации по умолчанию, чтобы значение по умолчанию было готово, прежде чем объект можно будет использовать. Я хотел бы предложить людям прекратить предлагать другим читать документ; пожалуйста, ответьте на вопрос напрямую, если можете.

3 голосов
/ 28 апреля 2009

Другой вариант - написать свой собственный метод получения для вашего входного свойства и вернуть @ "", если переменная экземпляра равна nil. Это будет работать, даже если вы случайно или намеренно назначили nil для ввода, тогда как использование init для установки значения по умолчанию прервется.

0 голосов
/ 15 апреля 2013

Самый очевидный способ реализовать это будет выглядеть следующим образом:

  1. В вашем файле viewcontroller.m переопределите метод init по умолчанию. Этот метод вызывается каждый раз при инициализации контроллера представления. Так что это лучший способ инициализировать вашу переменную.

    - (id)initWithNibName:(NSString*)aNibName bundle:(NSBundle*)aBundle {
        self = [super initWithNibName:aNibName bundle:aBundle]; // The UIViewController's     version of init
        if (self) {
            varName = [[NSString alloc] initWithString:@""];
        }
        return self;
    }
    
  2. Теперь, где бы в вашем коде вы не добавляли строку к вашему оригинальная строка, просто используйте: varName = [NSString stringwithformat:@"%@%@", varName, newString];

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