【问题标题】:NSString+Extension warning when creating a NSMutableString from self从 self 创建 NSMutableString 时出现 NSString+Extension 警告
【发布时间】:2013-03-04 12:55:53
【问题描述】:

在我创建的 iphone 应用程序和 NSString 的扩展类中。

NSString+Extensions.m

在其中一种方法中,我需要将字符串转换为 NSMutableString。

我试过用这个:

NSMutableString * stringToManipulate = [NSMutableString stringWithString:self];

但它发出警告:

Incompatible pointer types sending 'const Class' to parameter of type 'NSString *'

据我所知,self 是对我调用该方法的字符串的引用,对吧?那么为什么它不应该是 NSString* 类型呢?知道我可以在 self 上使用常用的 NSString 方法。

对这个问题有什么想法吗?

谢谢

【问题讨论】:

    标签: ios objective-c nsstring class-extensions


    【解决方案1】:

    检查该方法是声明为类方法(带有 + 符号)还是实例方法(带有 - 符号)。如果是第一种情况,编译器警告是正常的。然后将方法转为实例一

    【讨论】:

    • 是的,它是使用 + 符号声明的。无论如何,我可以在不将其更改为 - 的情况下完成这项工作?谢谢
    • 不。类方法中的 self 是对类的引用,因此没有提供实例值。如果要使用实际值,只需实例化字符串,然后在其中调用 jnstance 方法。
    • 对不起,我明白你的意思了。是的,就是这样,谢谢。我以为我必须更改 NSString+Extensions.m 名称中的 + :) 但你的意思是在方法中。抱歉,太晚了,我要睡觉了:)
    【解决方案2】:

    在 Objective-C 中,当您在类方法中调用 self 时,它会引用类对象。对于NSString 类方法,调用self 与调用[NSString 类] 相同。

    所以,你的行是一样的:

    NSMutableString * stringToManipulate = [NSMutableString stringWithString:[self class]];

    如果您将方法从类一(+ 符号)更改为对象一(- 符号),它会起作用,但您必须以不同的方式调用它(来自 NSString 对象)。

    如果您想进一步解释,您可以发布整个方法声明吗? 您还可以查看 NSObject 协议参考以获取有关 +class 方法的更多信息:https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html

    希望这会有所帮助,

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-17
      • 2023-04-07
      • 2021-03-25
      • 1970-01-01
      • 2013-12-14
      • 1970-01-01
      • 2018-03-22
      相关资源
      最近更新 更多