【问题标题】:Unrecognized Selector Instance Error for Objective-C MethodObjective-C 方法的无法识别的选择器实例错误
【发布时间】: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


【解决方案1】:

好的,显然我做了一个 oopsie,发生的事情是我在 NSManagedObject 实体 xcodedatamodeld 中定义了从未定义的截止日期,这就是引发错误的原因。该定义存在于我的类中,但不存在于 NSManagedEntity 定义中。

【讨论】:

    猜你喜欢
    • 2023-03-19
    • 1970-01-01
    • 2014-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    相关资源
    最近更新 更多