如何在Objective-C(iOS)中调用此方法?

时间:2011-08-20 00:15:24

标签: objective-c methods call declare

我花了几个小时的时间试图找到答案。我试过[我觉得无论如何!]成为一切。我不能在我的代码中调用此方法而不会出现此错误:

  

接收器类型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];
}

6 个答案:

答案 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