我花了几个小时的时间试图找到答案。我试过[我觉得无论如何!]成为一切。我不能在我的代码中调用此方法而不会出现此错误:
接收器类型NSString for instance消息未声明带有选择器
的方法returnAsDoubleDigits:
我试图重构我的代码,因此我可以重复使用此方法将单位数字(转换为NSString
)作为双位数字符串返回(即4
变为04
)。< / p>
请有人帮我吗?我是否已正确宣布等?非常感谢! :)
请拨打以下内容:
[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];
}
答案 0 :(得分:3)
问题是你在类型为NSString
的对象上调用方法,当你在实际放入它的任何类中声明了方法时。你可以通过以下两种方式解决这个问题: 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];
答案 1 :(得分:3)
NSString* doubleDigitString = [self returnAsDoubleDigits:digits];
您也可以随时使用categories。
@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];
答案 2 :(得分:1)
根据您的情况,您似乎没有将方法添加到doubleDigitString
所属的类中。查看Objective-C Categories以添加到类的现有实现。
答案 3 :(得分:1)
您看到错误的方法,您试图在NSString类类型上调用该方法,但该方法未针对NSStrings声明。
我假设你已经在自己的类中声明了这个方法。如果您在与实现相同的类中使用它,则可以执行以下操作:
NSString *doubleDigitString = [self returnAsDoubleDigits:singleDigitString];
'self'指的是您的实现类。要让它与上面显示的NSStrings一起使用,你需要使用一个类别,但我不打算进入那个类别,因为它会使事情进一步混淆,就像你想要实现的那样简单。
我认为你需要在深入研究之前修改目标C的基础知识,如果需要花费数小时才能得到像这样的简单工作。
答案 4 :(得分:0)
根据你所拥有的内容,看起来你还没有将方法添加到doubleDigitString所属的类中。查看Objective-C Categories以添加到类的现有实现中。
答案 5 :(得分:-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