Подклассы NSString - PullRequest
       1

Подклассы NSString

3 голосов
/ 01 августа 2011

Используя WSDL2ObjC, я получаю много классов, которые являются подклассами NSString. Я нахожу трудным инициализировать значение NSString любого объекта этих классов.

Скажите, что мой класс выглядит так:

@interface mClass ; NSString {
     int value;
}

Теперь в моем коде я хотел бы использовать объекты mClass как NSString, а также использовать его значение атрибута, которое является целым числом.

Как я могу это сделать?

Я пытаюсь использовать такой код

 mClass *obj = [[mClass alloc] initWithString:@"Hello"];

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

Ответы [ 3 ]

6 голосов
/ 24 января 2014

Если вам действительно нужно сделать подкласс NSString, вы должны переопределить 3 метода:

- (instancetype)initWithCharactersNoCopy:(unichar *)characters length:(NSUInteger)length freeWhenDone:(BOOL)freeBuffer;
- (NSUInteger)length;
- (unichar)characterAtIndex:(NSUInteger)index;

Например:

MyString.h

@interface MyString : NSString 

@property (nonatomic, strong) id myProperty;

@end


MyString.m

@interface MyString ()

@property (nonatomic, strong) NSString *stringHolder;

@end

@implemenation MyString

- (instancetype)initWithCharactersNoCopy:(unichar *)characters length:(NSUInteger)length freeWhenDone:(BOOL)freeBuffer {
    self = [super init];
    if (self) {
        self.stringHolder = [[NSString alloc] initWithCharactersNoCopy:characters length:length freeWhenDone:freeBuffer];
    }
    return self;
}

- (NSUInteger)length {
    return self.stringHolder.length;
}

- (unichar)characterAtIndex:(NSUInteger)index {
    return [self.stringHolder characterAtIndex:index];
}

@end
0 голосов
/ 11 марта 2013

Может быть разумнее использовать класс-оболочку, которая внутренне использует строки NSS для выполнения любых операций или манипуляций, которые вы пытаетесь выполнить.Однако это приведет к необходимости перегрузить любую функциональность NSString, которую вы хотите (например, получить длину строки).

Или вы можете создать категорию NSString (находится прямо рядом с классом Objective-C).в новом окне файла).Это позволяет вам добавлять любые свойства или методы, которые вы хотите «добавить» в класс NSString.Теперь просто импортируйте эту категорию туда, где вы хотите ее использовать, и все ваши пользовательские функции будут доступны для любых объектов NSStrings.

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

Вам действительно нужно подкласс NSString? Это кластер класса , что (помимо прочего) означает, что его трудно подклассить. Хороший пост Майка Эша о кластерах классов подклассов . Если вы не знали, что кластеры классов существуют, вы, вероятно, новичок в Какао, и в этом случае лучший короткий ответ - не пытайтесь создавать подклассы кластеров классов .

Есть также предыдущие вопросы о подклассах NSString здесь, в Переполнении стека. В следующий раз вы, возможно, захотите немного поискать, прежде чем задать новый вопрос.

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