【发布时间】:2019-03-23 16:53:02
【问题描述】:
我只是在自定义类中创建一个简单的公共方法,但是每当我创建类并在 ViewController 中调用该方法时,都会抛出此异常。
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[PTask testMethod]: unrecognized selector sent to instance 0x600003316300
我已经读到这是某种内存问题,但我不一定知道如何解决它。奇怪的是,这个类中还有其他的 getter/setter 方法,但它们不受这个问题的影响。
我已尝试改用@dynamic,但它一直抛出相同的错误。
这是我遇到问题的课程:
任务.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
任务.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
【问题讨论】:
-
测试你的代码没有发现任何问题,你能详细说明你是如何导致崩溃的吗?简单地创建一个实例并调用它的方法不会崩溃
-
每次我从 addTask 视图控制器放松时都会创建一个新的 Task 实例。如果我在那里初始化一个对象,我可以调用 setTitle: setPriority 很好,但调用 testMethod 会导致错误。
-
错误消息显示
PTask。您的来源显示Task。有些东西没有完全转化为 StackOverflow。此外,将@property与实例变量声明混合通常表明事情已经偏离轨道。 -
我忘了说,PTask 就像 NSManagedObject Entity 版本的 Task。它们不是一回事吗?
-
“PTask 就像任务的 NSManagedObject 实体版本”这取决于您如何定义它。你能显示那个代码吗?
标签: ios objective-c memory