2014-01-31 2 views
3

У меня есть простой объект, который выглядит следующим образом:создания нового объекта бросков copywithzone неопознанной ошибки селектора прошивка

#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 

Почему это происходит и как я могу это исправить?

+0

Это происходит потому, что вы не показали нам весь код. –

+0

У вас есть собственный метод инициализации для 'MyCycle'? Не могли бы вы опубликовать его? – Undo

+0

Вы все еще не указали нам код, в котором произошел сбой. Вам нужно научиться использовать отладчик, чтобы найти точку отказа. –

ответ

6

Где-то в вашем коде у вас есть код, который пытается скопировать экземпляр MyCycle. Возможно, вы используете объект в качестве ключа для словаря? Если вы хотите продолжить это поведение, вам необходимо реализовать NSCopying protocol для вашего класса.

+0

поэтому для свойств объекта я должен использовать сильные, а не копии? Я изменил каждое место, которое я использую для копирования, и оно работает. – Atma

+0

@ Atma Нет, если вы хотите скопировать, это нормально. Просто нужно выполнить фактическую копию. –

+0

@Atma Нет ничего плохого в любом из кода, который вы опубликовали. Не нужно изменять какие-либо свойства 'copy' на' keep'. Обновите свой вопрос с помощью фактического кода, вызывающего сбои. – rmaddy

0

Одна из причин, по которой может произойти эта ошибка. Имя переменной, которую вы объявляете, или ваш пользовательский класс уже используется SDK iOS. Вы можете сказать, что это ключевое слово. И имя переменной никогда не может быть ключевым словом, потому что это смущает ваш XCode (компилятор Objective C).

0

Я знаю, что на это давали ответы некоторое время, но для потомков здесь есть еще одна, которая может быть причиной. Проверьте привязки. Это также произойдет, если вы случайно связали контроллер в Interface Builder, и элемент управления пользовательского интерфейса попытается использовать фактический контроллер как строку или другой тип значения, который вызывает выпуск copyWithZone:.

Например, если у Владельца Файла есть вложенный контроллер, и вы случайно привязаны к innerController вместо innerController.property.

0

Это старый вопрос, но, вероятно, у вас нет данных @synthesized properties ',' myNumber '. Другими словами, у вас нет настроек для этих свойств.

 Смежные вопросы

  • Нет связанных вопросов^_^