0

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

NSString+Extensions.m班级

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

我试着用这个:

NSMutableString * stringToManipulate = [NSMutableString stringWithString:self];

但它发出警告:

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

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

对这个问题有任何想法吗?

谢谢

4

2 回答 2

1

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

于 2013-03-04T12:58:11.800 回答
1

在 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

希望这会有所帮助,

于 2013-03-04T13:10:54.590 回答