#objective-c #cocoa #cocoa-touch #xcode
#objective-c #cocoa #cocoa-touch #xcode
Вопрос:
Я написал следующий пользовательский класс:
AKRelativeDates.h
#import <Foundation/Foundation.h>
#import "NSDate-Utilities.h"
@interface AKRelativeDates
- (NSString *)relativeDateFromDate:(NSDate *)date in24hFormat:(BOOL)in24hFormat capitalized:(BOOL)capitalized;
@end
AKRelativeDates.m
#import "AKRelativeDates.h"
@implementation AKRelativeDates
- (NSString *)relativeDateFromDate:(NSDate *)date in24hFormat:(BOOL)in24hFormat capitalized:(BOOL)capitalized
{
// method implementation removed
return @"test";
}
@end
Я импортировал файл заголовка, класс распознан, но метод — нет. Я делаю что-то не так?
Комментарии:
1. Я не вижу date, in24hFormat и т.д… Объявлены в любом месте вашего заголовочного файла. Я вижу, что они объявлены в вашем методе, но вы должны объявить их непосредственно в вашем заголовочном файле.
2. Что вы подразумеваете под «не распознанным»? Получаете ли вы предупреждения в коде, использующем этот метод?
3. @JeremyP Да, я получаю следующее предупреждение: ‘AKRelativeDates’ может не отвечать на ‘ relativeDateFromDate:in24hFormat:capitalized:’, плюс еще одно, что метод не найден, возвращаемый тип по умолчанию равен ‘id’. Завершение кода Xcode также не предлагает этот метод
Ответ №1:
Вы упускаете некоторые вещи из своего заголовка:
#import <Foundation/Foundation.h>
#import "NSDate-Utilities.h"
@interface AKRelativeDates : NSObject //Follow the class name with the superclass.
{
//Now enclose any class objects if any - if none then brackets are optional
}
//And now time for the method declarations:
- (NSString *)relativeDateFromDate:(NSDate *)date in24hFormat:(BOOL)in24hFormat capitalized:(BOOL)capitalized;
@end
Кроме того, если это метод класса (т. Е. вы не хотите создавать объект перед использованием этого метода), замените ‘-‘ на ‘ ‘
Комментарии:
1. Скобки необходимы только в том случае, если класс объявляет переменные экземпляра.
2. @Bavarious, которого я не знал 🙂 Изменили ответ, чтобы отразить это.
3. Спасибо! Вот и все, знак » «. Таким образом, он распознается, хотя и происходит сбой… Включение суперкласса (NSObject) также было необходимо, хотя скобки необязательны.
Ответ №2:
Как говорит Джордан, ваш заголовок неполон.
Однако вы также не импортируете его в файл исходного кода, в котором вы используете метод.
Комментарии:
1. Я не включил исходный код, в котором я пытался его использовать.. Однако я указал, что заголовок был импортирован туда.
Ответ №3:
@JeremyP Да, я получаю следующее предупреждение: ‘AKRelativeDates’ может не отвечать на ‘ relativeDateFromDate:in24hFormat:capitalized:‘, плюс еще одно, что метод не найден, возвращаемый тип по умолчанию равен ‘id’. Завершение кода Xcode также не предлагает этот метод
Судя по вашему ответу, вы, вероятно, используете его таким образом:
[AKRelativeDates relativeDateFromDate:theDate in24hFormat:theIn24hFormat capitalized:theCapitalized];
Вы обращаетесь к методу из class, но вы объявили метод как метод экземпляра. @Jordan указал вам правильный ответ в своем последнем предложении. Я просто пытаюсь быть более конкретным.
Измените — на в обоих .файл h и .m, подобный этому:
(NSString *)relativeDateFromDate:(NSDate *)date in24hFormat:(BOOL)in24hFormat capitalized:(BOOL)capitalized
Комментарии:
1. Разница в сообщении об ошибке заключалась в том, что тем временем я пытался изменить несколько вещей в Xcode; на самом деле проблема была со знаком — / , поскольку я намеревался создать этот метод для использования напрямую, без создания экземпляра объекта ранее.