【问题标题】:copyWithZone error -[DataObject setECGCount:]: unrecognized selector sent to instancecopyWithZone 错误 -[DataObject setECGCount:]:无法识别的选择器发送到实例
【发布时间】:2020-12-09 17:41:35
【问题描述】:

我的应用程序因以下错误而崩溃:

-[Data Object set ECGCount:]:无法识别的选择器发送到实例 0x281671ad0

我正在尝试将我的主 viewController 类之间的数据传递给 DataObject 类,然后最终将这些信息传递给 IntervalGraph 类。

我正在使用 copyWithZone 执行此操作,但是遇到了问题。

这里是 viewContoller.h 类:

#import <UIKit/UIKit.h>
#import "CorePlot-CocoaTouch.h"

@interface ViewController : UIViewController<CPTPlotDataSource>

@property (nonatomic, assign) int eCGCount;
@property (nonatomic, assign) int eCGheartRate;

@end

以及viewController.m

中的相关代码
@property (nonatomic) DataObject *maxRecordedHR, *minRecordedHR, *currentData, *continuousData, *seizureData;

- (void)viewDidLoad
{
  [super viewDidLoad];

       [[NSNotificationCenter defaultCenter addObserver:self
                                                                                                
                                             selector:@selector(sensorDataUpdated)
                                                                                                  
                                              name:@"LYRDeviceCommunicatorDataUpdated"
                                                                                                    
                                            object:nil];   

       self.rollingAverageHRArray = [[NSMutableArray alloc]initWithCapacity:180];
       self.currentData           = [[DataObject alloc]init];
       self.continuousData        = [[DataObject alloc]init];
       self.seizureData           = [[DataObject alloc]init];
}

//fired by a 1 second timer
-(void)startIntervalGraph {
  [self sensorDataUpdated];
  if (self.currentData.heartrate == 0 )
  {NSLog(@"No data");
          
  } else {
  
  self.rollingAverageLabel.text = [NSString stringWithFormat:@"rolling 3 min average %1.1f", self.currentData.rollingaverageheartrate];
  [self.intervalGraph addDataObject:self.currentData]; // something wrong here
  [self.intervalGraph updateGraph];
          NSLog(@"Updating Interval Graph");
          
  }
}
 
 -(void) sensorDataUpdated {
     //Heart Rate
     self.currentData.heartrate = self.eCGheartRate;
     NSLog(@"Current Data %d", self.currentData.heartrate);
  
}

-(void)setECGCount:(int)eCGCount
{
      self.eCGheartRate = (int) eCGCount;
      eCGCount = self.eCGCount;
      NSLog(@"eCGCount %d", self.eCGCount);
}

然后是 DataObject.h

#import <Foundation/Foundation.h>

@interface DataObject : NSObject <NSCopying>

@property int heartrate;
@property float rollingaverageheartrate;
@property float rrinterval;
@property NSTimeInterval occurrence;
@property NSInteger minHRsetting;
@property NSInteger maxHRsetting;
@property int alarmtripped;

@end

DataObject.m

#import "DataObject.h"
#import "CRPC_300SDK.h"
#import "ViewController.h"

@implementation DataObject

- (id)copyWithZone:(NSZone *)zone
{
      id copy =  class alloc] init];
  
      if (copy) {
              // Set primitives
              [copy setECGCount:self.heartrate]; //THIS IS WHERE THE CRASH OCCURS.
              //[copy setRrinterval:self.rrinterval];
              [copy setRollingaverageheartrate:self.rollingaverageheartrate];
              [copy setOccurrence:self.occurrence];
              [copy setMinHRsetting:self.minHRsetting];
              [copy setMaxHRsetting:self.maxHRsetting];
              [copy setAlarmtripped:self.alarmtripped];
          
      }
  
      return copy;
  
}

当我打电话时

[copy setECGCOUNT:self.heartrate];

应用程序崩溃并出现以下错误:

2020-08-20 11:58:57.884543+0100 PulseGuardian[3927:2317144] -[DataObject setECGCount:]: 无法识别的选择器发送到实例 0x281671ad0

2020-08-20 11:58:57.885908+0100 PulseGuardian[3927:2317144] * 由于未捕获的异常而终止应用程序 'NSInvalidArgumentException',原因:'-[DataObject setECGCount:]: 无法识别的选择器发送到实例 0x281671ad0'

我该如何解决这个问题?

【问题讨论】:

  • [copy setECGCount:self.heartrate]; => [copy setHeartrate:self.heartrate]; setECGCount 方法是什么?
  • DataObject 没有名为 ECGCount 的属性,因此无法设置它。
  • @Larme 谢谢,我是个白痴,这解决了问题。应用程序现在可以正常运行。

标签: objective-c xcode ipad crash copy


【解决方案1】:

正如@Larme 在 cmets 中指出的那样,我在

中引用了错误的方法

DataObject.m

读取的代码:

[copy setECGCount:self.heartrate];

什么时候应该读到:

[copy setHeartrate:self.heartrate];

一旦代码被更改,应用程序就可以正常工作。代表我犯了一个愚蠢的错误,但会留在这里,以防将来对其他人有帮助。

【讨论】:

    猜你喜欢
    • 2014-10-17
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    相关资源
    最近更新 更多