【问题标题】:Using a NSString subclass in UILabel et.al在 UILabel et.al 中使用 NSString 子类
【发布时间】:2015-12-22 11:08:21
【问题描述】:

我需要将其他数据编码为NSString(长话短说,请不要问为什么......)

我使用here 概述的方法对NSString 进行了子类化:

当我将这些子类之一分配为 UILabel's 文本时,我希望在询问标签文本时将其取回。但事实并非如此。 (我得到了一个 NSString 集群实例)

MyString *string = [[MyString alloc] initWithString:@"Some string"];
UILabel *l = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
l.text = string;
NSString *t = l.text;  // not getting the "MyString" object

有解决办法吗?

【问题讨论】:

  • 我认为子分类是一个禁忌。你探索过类别吗?无论如何,我不会问你为什么要分类(不感兴趣/你说不),但我认为你不需要。
  • UILabel 文本属性是一个 NSString,我认为这就是你没有得到 'MyString' 对象的原因。也许您还需要继承 UILabel 并将 text 属性设置为“MyString”。 developer.apple.com/library/ios/documentation/UIKit/Reference/…
  • 子类化 NSString 听起来是个坏主意。
  • @enzo 这没有意义。即使指向类实例的指针指向基类,子类仍然存在。正如 Wain 所说,复制才是问题所在。
  • 我同意子类化是不好的——但是混合也是不好的。当你调配 UILabel:setText: 时,有时你别无选择,只能继承 NSString

标签: ios objective-c nsstring class-cluster


【解决方案1】:

标签复制字符串:

@property (nonatomic, copy) NSString *text

所以您至少需要实现复制以返回您的子类类型并复制您的其他数据。

(不是子类化是最好的主意)

【讨论】:

    【解决方案2】:

    如果你继承 NSString,你会比我更勇敢,而且你完全靠自己。 NSString 是一个类簇。你基本上没有机会在地狱中继承它并让它工作。它从初始化开始,其中将是 NSString init 方法的 [super init] 可能返回任何类型的对象。

    【讨论】:

    • 根据文档,这是可能的。归根结底,我正在使用底层的 NSString 基础。是的,我很勇敢:)
    • It is possible to subclass NSString (and NSMutableString), but doing so requires providing storage facilities for the string (which is not inherited by subclasses) and implementing two primitive methods.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多