Новый метод в подклассе показывает предупреждение в Objective-c - PullRequest
0 голосов
/ 10 сентября 2011

Я переклассифицировал класс NSDate и добавил свой метод myDate в

@interface NSDate (NSDateAdditions) section.

Когда я хочу использовать этот метод, я импортирую «NSDateAdditions.h» и использую его. Проблема в том, что я всегда получаю предупреждение "NSDate" может не отвечать на "myDate" "

Есть ли способ избавиться от этого предупреждения?

Ответы [ 2 ]

2 голосов
/ 10 сентября 2011

Когда вы пишете:

@interface NSDate (NSDateAdditions)

вы не подклассы NSDate. Вместо этого вы добавляете категорию с именем NSDateAdditions к классу NSDate. При этом класс по-прежнему называется NSDate, а методы, объявленные в категории, добавляются в NSDate.

Вы можете объявить методы класса и / или экземпляра в категории. Например:

// NSDate+NSDateAdditions.h

@interface NSDate (NSDateAdditions)
- (id)anInstanceMethod;
+ (id)aClassMethod;
@end

и

// SomeImplementationFile.m

#import <UIKit/UIKit.h>
#import "NSDate+NSDateAdditions.h"

// in some method…
{
    NSDate *someDate = [NSDate aClassMethod];

    NSDate *anotherDate = [NSDate date];
    id someResult = [anotherDate anInstanceMethod];
}

Не видя объявления вашей категории (и того, как вы его используете), трудно понять, что не так с вашим кодом. Необходимо проверить, объявили ли вы класс или метод экземпляра - методы класса объявлены с +, а методы экземпляра объявлены с -. При использовании метода класса вы отправляете сообщение классу, а именно: NSDate:

    // Send a message to the class
    NSDate *someDate = [NSDate aClassMethod];

При использовании метода экземпляра вы отправляете сообщение ранее созданному экземпляру:

    // Create an instance
    NSDate *anotherDate = [NSDate date];

    // Send a message to the instance
    id someResult = [anotherDate anInstanceMethod];
0 голосов
/ 10 сентября 2011

Извините, согласно тому, что вы написали, у вас нет подкласса NSDate.Что вы делаете, вы добавляете категорию NSDateAdditions.Даже этот путь не кажется правильным, так как я не понимаю, что такое «раздел».Компилятор должен пожаловаться.Вместо этого вы должны сделать это следующим образом:

@interface NSDateAdditions:NSDate
//declare your method here.
@end;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...