Как мне вызвать этот метод в target-C (iOS)? - PullRequest
1 голос
/ 20 августа 2011

Я буквально часами пытался найти ответ на этот вопрос. Я пытался [что я чувствую в любом случае!] Быть всем. И я не могу вызвать этот метод в моем коде без получения этой ошибки:

Тип получателя 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];
}

Ответы [ 6 ]

3 голосов
/ 20 августа 2011

Откуда ты звонишь? в том же классе? Это то, что вы намеревались?

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];
3 голосов
/ 20 августа 2011

Проблема заключается в том, что вы вызываете метод для объекта типа 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 голос
/ 20 августа 2011

Вы видите, что это неправильно, вы пытаетесь вызвать этот метод для типа класса NSString, но этот метод не объявлен для NSStrings.

Полагаю, вы объявили этот метод в своем собственном классе.Если вы используете его в том же классе, что и реализация, вы можете сделать что-то вроде:

NSString *doubleDigitString = [self returnAsDoubleDigits:singleDigitString];

«self» относится к классу вашей реализации.Чтобы он работал с NSStrings, как вы показали выше, вам нужно использовать категорию, но я не буду вдаваться в это, потому что это еще больше запутает вещи для чего-то простого, например, того, что вы пытаетесь достичь.

Я думаю, вам нужно пересмотреть основы Objective C, прежде чем углубиться, если вам потребовались часы, чтобы получить что-то простое, как эта работа.

1 голос
/ 20 августа 2011

Из того, что у вас есть, похоже, что вы не добавили метод в класс, к которому принадлежит doubleDigitString. Проверьте Objective-C Categories , чтобы добавить к существующей реализации класса.

0 голосов
/ 09 апреля 2014

Из того, что у вас есть, похоже, что вы не добавили метод в класс, к которому принадлежит doubleDigitString. Проверьте Objective-C Категории, чтобы добавить к существующей реализации класса.

0 голосов
/ 20 августа 2011

Вы не указали категории правильно.

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
...