Задача Задачи c относительно NSString NSInteger и вызовов методов - PullRequest
2 голосов
/ 30 июня 2009

Мне нравится создавать экземпляр пользовательского класса, передавая ему значение, которое после init поможет его настроить. Я переопределил init и фактически изменил его на:

- (id)initWithValue:(NSInteger *)initialValue;

Я хотел бы сохранить это значение в свойстве экземпляра объекта и использовать его для генерации имени файла UIImage, который будет с ним связан.

Мой вопрос: как лучше это сделать в Какао / Obj-C? NSInteger лучший параметр для моих нужд или NSString будет лучше? Или есть другой шаблон дизайна? Я не знаком со всеми творческими методами, которые могут помочь в этой ситуации. Предположим, что мои свойства класса:

@interface MyView : UIView {
UIImage *image;
NSInteger value;

Если я использую NSInteger в качестве параметра, я легко могу присвоить ему значение . но тогда потребуется сгенерировать "image12.png" из этого значения (предположим, NSInteger = 12), чтобы настроить мой UIImage. Что-то вроде "image" + initialValue + ". Png". Который, я полагаю, многословно выражен в Obj-C как:

NSString *myValue = @"image";
[myValue stringByAppendingString:[initialValue stringValue]]; //NSInteger may not respond to stringValue?!?
[myValue stringByAppendingString:@".png"]

Именно здесь мое понимание Obj-C нарушается. Мне кажется, что это должно быть проще, но я все еще в замешательстве.

Теперь, если initialValue был строкой NSSt со значением @ "12", может быть, это так? затем self.value = [initialValue integerValue];

и я могу создать image с несколькими вызовами stringByAppendingString. Просто кажется утомительным для чего-то такого простого на других языках.

Какой лучший способ справиться с чем-то подобным?

Ответы [ 3 ]

9 голосов
/ 30 июня 2009

Ваш метод init выглядит нормально, и если вы имеете дело только с целочисленными значениями, вы действительно хотите использовать NSInteger, а не NSString или даже NSNumber. Единственное, что вы можете изменить, это то, что передаваемый параметр должен быть (NSInteger), а не (NSInteger *) - NSInteger не является объектом, но в Objective-C это примитивный тип, подобный int.

Вы можете создать имя изображения с помощью селектора NSString stringWithFormat:, например:

NSInteger myInteger = 12;
NSString *imageString = [NSString stringWithFormat:@"image%d.png", myInteger];
2 голосов
/ 30 июня 2009

Просто чтобы расширить то, что упомянул Тим, NSInteger на самом деле просто #define. На 32-битных архитектурах это эквивалентно int, а на 64-битных архитектурах это long.

Если вам нужно обработать целое число как объект (например, чтобы поместить его в NSDictionary), вы можете заключить его в экземпляр NSNumber, используя numberWithInteger:

Надеюсь, это поможет!

0 голосов
/ 30 июня 2009

Следует помнить еще одну вещь: когда вы имеете дело с путями, NSString дает вам stringByAppendingPathExtension: и stringByAppendingPathComponent:, оба из которых обрабатывают такие вещи, как конечные слэши, лучше, чем если вы просто используете stringByAppendingString:.

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

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