在iOS中创建新对象会引发copywithzone无法识别的选择器错误

时间:2014-01-31 22:34:20

标签: ios objective-c cocoa-touch nsobject

我有一个简单的对象,如下所示:

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

@class MyUser;

@interface MyCycle : NSObject


@property (nonatomic, copy) NSNumber *myNumber;
@property (nonatomic, strong) MyUser *user;
@property (nonatomic, strong) NSArray *data;


@end

以下是实施:

#import "MyCycle.h"

@implementation MyCycle



@end

这是用户对象:

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


@interface MyUser : NSObject

@property (nonatomic, copy) NSString *usersName;
@property (nonatomic, copy) NSString *gender;
@property (nonatomic, copy) NSString *email;
@property (nonatomic, copy) NSString *password;
@property (nonatomic, copy) NSString *phoneNumber;
@property (nonatomic, strong) UIImage *profileImage;
@property (nonatomic, strong) PFFile *profileImageFile;




@end

我分配此对象并使用以下内容填充它:

MyCycle *cycle = [[MyCycle alloc] init];
        cycle.myNumber = @1;
        cycle.data = [[NSArray alloc]init];

我收到以下错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MyCycle copyWithZone:]: unrecognized selector sent to instance

为什么会发生这种情况,我该如何解决?

4 个答案:

答案 0 :(得分:6)

在代码中的某处,您有一个尝试复制MyCycle实例的代码。也许你使用一个对象作为字典的关键?如果您希望继续此行为,则需要为您的班级实施NSCopying protocol

答案 1 :(得分:0)

可能发生此错误的原因之一是您声明的变量的名称或iOS SDK已使用您的自定义类。你可以说这是一个关键词。并且变量名永远不能是关键字,因为它会混淆您的XCode(Objective C Compiler)。

答案 2 :(得分:0)

我知道这已经回答了一段时间但是对于后代来说,这是另外一个可能是原因。检查你的绑定。如果您不小心在Interface Builder中绑定控制器并且UI控件尝试将实际控制器用作导致copyWithZone:发出的字符串或其他值类型,也会发生这种情况。

例如,如果文件所有者具有嵌套控制器,并且您不小心绑定到innerController而不是innerController.property

答案 3 :(得分:0)

这是一个古老的问题,但可能没有@synthesized属性&#39;数据&#39; myNumber&#39;。换句话说,你没有这些属性的setter。