1

我已经花了好几个小时试图找到这个问题的答案。我已经尝试过[无论如何我的感受!] 成为一切。而且我无法在我的代码中调用此方法而不会出现此错误:

接收器类型 NSString 例如消息未声明带有选择器的方法returnAsDoubleDigits:

我试图重构我的代码,以便我可以重用此方法将单个数字(转换为NSString)作为两位数字符串返回(即4变为04)。

请问有人可以帮我吗?我什至是否正确声明了它等等?非常感谢!:)

调用类似的东西:

[doubleDigitString returnAsDoubleDigits: singleDigitString];

头文件:

- (NSString *)returnAsDoubleDigits: (NSString *)digits;

实现文件:

- (NSString *)returnAsDoubleDigits: (NSString *)digits {
    if (digits.length == 1) return [NSString stringWithFormat: @"0%@", digits];
    else return [NSString stringWithFormat: @"0%@", digits];
}
4

6 回答 6

3

NSString问题是,当您在实际放入的任何类中声明该方法时,您正在调用 type 对象上的方法。您可以通过两种方式解决此问题:使用 NSString 上的类别,或将您的消息定向到声明方法的类型的对象。

以下是如何进行分类:

NSString+doubleDigit.h

@interface NSString (doubleDigit)
    -(NSString*)doubleDigit;
@end

NSString+doubleDigit.m

@implementation NSString (doubleDigit)

-(NSString*)doubleDigit {
    return [NSString stringWithFormat:@"%02i", [self integerValue]];
}

@end

然后在要进行此转换的文件中,#include "NSString+doubleDigit.h"只需编写:

NSString *doubleDigitString = [singleDigitString doubleDigit];
于 2011-08-20T00:23:18.847 回答
3

你从哪里调用它?在同一个班?这是你想要的吗?

NSString* doubleDigitString = [self returnAsDoubleDigits:digits];

您也可以随时使用类别

@implementation NSString (mycategory)


-(NSString *) returnAsDoubleDigits
{
   NSString* doubleDigits = nil;
   if (self.length == 1) {
    doubleDigits = [NSString stringWithFormat: @"0%@",
                    self];
   } else {
    doubleDigits = [NSString stringWithFormat: @"0%@",
                      self];
   }
   return doubleDigits;
}
@end

然后使用

 NSString* doubleDigitString = [singleDigitString returnAsDoubleDigits];
于 2011-08-20T00:25:00.063 回答
1

从您在这里的情况来看,您似乎还没有将方法添加到doubleDigitString所属的类中。查看Objective-C 类别以添加到类的现有实现中。

于 2011-08-20T00:23:11.257 回答
1

你看到这个错误的方式,你试图在 NSString 类类型上调用该方法,但该方法没有为 NSStrings 声明。

我假设您已经在自己的类中声明了该方法。如果您在与实现相同的类中使用它,则可以执行以下操作:

NSString *doubleDigitString = [self returnAsDoubleDigits:singleDigitString];

'self' 是指实现的类。要让它像上面显示的那样与 NSStrings 一起工作,您需要使用一个类别,但我不打算深入讨论,因为它会进一步混淆您想要实现的简单事物。

我认为你需要在深入研究之前修改Objective C的基础知识,如果你需要花费几个小时才能让这样简单的事情起作用。

于 2011-08-20T00:23:22.300 回答
0

从这里的情况来看,您似乎没有将方法添加到 doubleDigitString 所属的类中。查看 Objective-C 类别以添加到类的现有实现中。

于 2014-04-09T10:45:47.283 回答
-1

您没有正确声明类别。

NSString *singleDigitString = [doubleDigitString returnAsDoubleDigits];
NSString+DoubleDigit.h file

@interface NSString (doubleDigit)
- (NSString*) returnAsDoubleDigits;
@end

NSString+DoubleDigit.m file

@implementation NSString (doubleDigit)

- (NSString*) returnAsDoubleDigits {
    NSString* doubleDigits = nil;
    if ([self length] == 1) {
        doubleDigits = [NSString stringWithFormat: @"0%@",self];
    } else { 
        doubleDigits = [NSString stringWithFormat: @"%@", self];
    } 
    return doubleDigits; 
}
@end
于 2011-08-20T00:25:18.510 回答