2011-08-01 38 views
3

使用WSDL2ObjC我得到很多NSString類的子類。 我發現初始化這些類的任何對象的NSString值是很麻煩的。子類化NSString

說我的課是這樣的:

@interface mClass ; NSString { 
    int value; 
} 

現在在我的代碼,我想用mClass的對象既是NSString的,也想使用它的屬性值是一個整數。

我該怎麼做?

我試圖用這樣的代碼

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

但它顯示了我的錯誤,說我使用的是類的抽象對象,我應該使用的具體實例。

+1

你相同的用戶http://stackoverflow.com/users/872255/neel8986?如果沒有,你能否簡要解釋爲什麼你有相同的IP地址併發布類似的問題? –

回答

0

真的需要子類NSString?這是一個class cluster,除了其他事情以外,這意味着很難進行子類化。 Mike Ash在subclassing class clusters上發表了一篇很好的文章。如果您不知道類集羣存在,那麼您可能是Cocoa的新手,在這種情況下,最佳答案是,不要嘗試將類集羣進行子類化。

還有previous questions關於子類化NSString在這裏堆棧溢出。下一次你可能想在問一個新問題之前進行一下搜索。

0

使用一個內部使用NSStrings來執行任何操作或操作的包裝類可能會更聰明。但是這會導致你需要重載你想要的NSString的任何功能(比如獲取字符串的長度)。或者,您可以創建一個NSString類別(在新文件窗口中可以在Objective-C類旁邊找到)。這使您可以添加任何您希望「添加」到NSString類的屬性或方法。現在只要將這個類別導入到任何你想使用它的地方,你就可以在任何NSStrings對象上使用你所有的自定義函數。

6

如果你真的需要做的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