Objective c 已将无法识别的选择器发送到实例

Objective c 已将无法识别的选择器发送到实例,objective-c,Objective C,事实上,问题在于 @property(非原子,复制)NSMutableArray*arrayOfObjects 应该是: @property(非原子,强)NSMutableArray*arrayOfObjects 是 啊谢谢,谢谢你们 我不太明白这个bug是如何工作的,但我会尽力去了解:) 一个多小时以来我一直在努力解决一个问题。。。恐怕这件事很简单,但我还不明白。我猜这是内存管理的东西,因为这是我的弱点 帖子有点像 还有一些人,但他们没有解决我的问题 简而言之(粘贴很多原因不知道潜在的bug

事实上,问题在于
@property(非原子,复制)NSMutableArray*arrayOfObjects

应该是:
@property(非原子,强)NSMutableArray*arrayOfObjects
是 啊谢谢,谢谢你们

我不太明白这个bug是如何工作的,但我会尽力去了解:)


一个多小时以来我一直在努力解决一个问题。。。恐怕这件事很简单,但我还不明白。我猜这是内存管理的东西,因为这是我的弱点

帖子有点像 还有一些人,但他们没有解决我的问题

简而言之(粘贴很多原因不知道潜在的bug在哪里):

//////////////////////////////////

#import "MyCustomObject.h"

@implementation MyCustomObject

@synthesize name;
@synthesize birthDay;
@synthesize heightInMeters;

-(id)initWithDate:(int)bd AndName:(NSString *)nameString AndHeight:(double)h{

    if(self = [super init]){
        self.birthDay = bd;
        self.name = nameString;
        self.heightInMeters = h;
        return self;
    }
    return nil;
}
@end
以及用于
MyCustomObject
s的某种数据库:

数据收集.h:

@interface DataCollection : NSObject{

    NSMutableArray* arrayOfObjects;

}
@property (nonatomic, copy) NSMutableArray* arrayOfObjects;

    -(void)addElement:(id)el;
@end
和执行:

    #import "DataCollection.h"

    @implementation DataCollection 
    @synthesize arrayOfObjects;

    -(id)init{
        if(self = [super init]){
            self.arrayOfObjects = [[NSMutableArray array] init];
            NSLog(@"Number of record before init: %d", [self.arrayOfObjects count]);
            [self addElement:[[MyCustomObject alloc] initWithDate:1988 AndName:@"Georg" AndHeight:1.88]];
            [self addElement:[[MyCustomObject alloc] initWithDate:1951 AndName:@"Sebastian" AndHeight:1.58]];
            NSLog(@"Number of record before init: %d", [self.arrayOfObjects count]);
            return self;
        }
        return nil;
    }

    -(void)addElement:(id)el{
        // UNRECOGNIZED SELECTOR ????
[self.arrayOfObjects addObject:el];
    }

    @end
结果是:

2013-03-05 15:42:56.826 XMLTest[11787:207]之前的记录数 初始化:0当前语言:自动;当前目标-c 2013-03-05 15:43:51.446 XMLTest[11787:207]-[\uu NSArrayI addObject:]:无法识别 选择器已发送到实例0x6816110


你知道我做错了什么吗?我猜这是关于内存管理的问题,我没有读过你的问题——太长了,但我想我可能知道你的问题。仅查看文章末尾的调试器输出,看起来您正试图将
addObject:
发送到
NSArray
对象。如果要向数组中添加和删除对象,则需要使用
NSMutableArray

我实际上没有阅读您的问题-太长了,但我想我可能知道您的问题。仅查看文章末尾的调试器输出,看起来您正试图将
addObject:
发送到
NSArray
对象。如果要向数组添加和删除对象,则需要使用
NSMutableArray

如果更改

@property (nonatomic, copy) NSMutableArray* arrayOfObjects;

如果你改变了,这会解决你的问题

@property (nonatomic, copy) NSMutableArray* arrayOfObjects;


这应该可以解决您的问题

为什么使用(非原子,复制)而不是(非原子,强)?或者至少
(非原子,保留)
,这可能是您的问题,当您分配
self.arrayOfObjects=blah
时,它在
NSMutableArray
上调用
copy
,它可能会返回一个数组的不可变副本,说明您为什么使用(非原子,复制)和不使用(非原子,强)?或者至少是
(非原子,保留)
这可能是您的问题,当您分配
self.arrayOfObjects=blah
时,它正在调用
NSMutableArray
上的
copy
,它可能返回数组的不可变副本。您应该提到,
copy
将创建一个不可变副本(因此OP看到了错误)是的,正如trojanfoe所说,当@property指令设置为copy时,getter方法将实际复制arrayOfObjects,但它将是一个NSArray,而不是NSMutableArray。NSArray没有实现addObject:方法,因此导致无法识别sed选择器错误。您应该提到,
copy
将创建一个不可变的副本(因此OP看到的错误)是的,正如trojanfoe所说,当@property指令设置为copy时,getter方法将实际复制arrayOfObjects,但它将是一个NSArray,而不是NSMutableArray。NSArray没有实现addObject:方法,因此导致无法识别sed选择器错误。是的,这确实是一个狡猾的问题。:)关键是-信任调试器消息,跟踪它们。这将引导您找到“为什么我的可变数组被转换为数组?”这将导致您的答案:是的,经过一些研究和学习,我发现你的答案还不错:啊,这肯定是个狡猾的问题。:)关键是-信任调试器消息,跟踪它们。这将引导您找到“为什么我的可变数组被转换为数组?”这将导致您的答案:是的,经过一些研究和学习,我发现你的答案还不错:D
@property (nonatomic, strong) NSMutableArray* arrayOfObjects;