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