Ошибка нераспознанного экземпляра селектора для метода Objective-C

#ios #objective-c #memory

#iOS #objective-c #память

Вопрос:

Я просто создаю простой общедоступный метод в пользовательском классе, но всякий раз, когда я создаю класс и вызываю метод в ViewController, я получаю это исключение.

 Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[PTask testMethod]: unrecognized selector sent to instance 0x600003316300
  

Я читал, что это какая-то проблема с памятью, но я не обязательно знаю, как это исправить. Как ни странно, в этом классе есть другие методы получения / установки, но на них эта проблема не влияет.

Вместо этого я попытался выполнить @dynamic, но он продолжает выдавать ту же ошибку.

Вот класс, с которым у меня возникают проблемы:

Task.h

 #import <CoreData/CoreData.h>
#import <Foundation/Foundation.h>

@interface Task : NSManagedObject

@property (nonatomic, strong) NSString *title;
//Deadline
//@property (nonatomic, strong) NSString *desc;
@property (nonatomic) double priority;
@property (nonatomic) double percentage;

- (void) testMethod;
@end
  

Task.m

 #import "Task.h"

@implementation Task {
    NSDate *deadline;
}

@dynamic title;
@dynamic priority;
@dynamic percentage;

- (instancetype)init
{
    self = [super init];
    if (self) {
        deadline = [NSDate date];
    }
    return self;
}

- (void)testMethod {
    NSLog(@"HELLO!");
}
@end
  

Комментарии:

1. протестированный ваш код не обнаружил проблемы, можете ли вы уточнить, как вы получаете этот сбой? Простое создание экземпляра и вызов его метода не приводит к сбою

2. Я создаю новый экземпляр задачи каждый раз, когда я отключаюсь от контроллера представления AddTask. Если я инициализирую там объект, я могу вызвать setTitle: setPriority нормально, но вызов TestMethod приводит к ошибке.

3. В сообщении об ошибке говорится PTask . Отображается ваш источник Task . Что-то не полностью переведено в StackOverflow. Кроме того, смешивание @property с объявлениями переменных экземпляра обычно является признаком того, что что-то пошло не так.

4. Я забыл упомянуть, PTask похож на версию объекта Task NSManagedObject. Разве это не одно и то же?

5. «PTask похож на версию объекта NSManagedObject для задачи», Это зависит от того, как вы это определили. Не могли бы вы показать этот код?

Ответ №1:

Хорошо, очевидно, я выполнил оопси, и произошло то, что я определил никогда не определенный крайний срок в объекте NSManagedObject xcodedatamodeld, поэтому и выдавалась ошибка. Определение существовало в моем классе, но не существовало в определении NSManagedEntity.