2

我有一个NSMutableArray我已经初始化的viewDidLoad

 self.titlesTagArreys = [@[@"Dollar", @"Euro", @"Pound",@"Dollar longString", @"Euro longStringlongString", @"Pound",@"Dollar", @"Euro", @"PoundlongStringlongString"]mutableCopy];

在.h中:

 @property(nonatomic, copy) NSMutableArray* titlesTagArreys;

当我尝试删除一项时,应用程序崩溃:

-(void)removeButtonWasPressed:(NSString*)tagTitle{
    NSLog(@"tagTitle - %@",tagTitle);
    NSLog(@"self.titlesTagArreys - %@",self.titlesTagArreys);    
    [self.titlesTagArreys removeObject:tagTitle];
}

这是日志:

2013-08-06 16:15:03.989 EpicTv[6378:907] tagTitle - Dollar
2013-08-06 16:15:03.991 EpicTv[6378:907] self.titlesTagArreys - (
    Dollar,
    Euro,
    Pound,
    "Dollar longString",
    "Euro longStringlongString",
    Pound,
    Dollar,
    Euro,
    PoundlongStringlongString
)
[__NSArrayI removeObject:]: unrecognized selector sent to instance 0x1c53bbd0
 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI removeObject:]: unrecognized selector sent to instance 0x1c53bbd0'
*** First throw call stack:
(0x327162a3 0x3a5c197f 0x32719e07 0x32718531 0x3266ff68 0x20ad55 0x20c9a5 0x20bf5d 0x346090c5 0x34609077 0x34609055 0x3460890b 0x34608e01 0x345315f1 0x3451e801 0x3451e11b 0x362295a3 0x362291d3 0x326eb173 0x326eb117 0x326e9f99 0x3265cebd 0x3265cd49 0x362282eb 0x34572301 0xafb89 0xa4d68)
libc++abi.dylib: terminate called throwing an exception
4

4 回答 4

6

似乎titlesTagArrays list 不是NSMutableArray因为removeObject无法调用。也许您NSArray将代码中的较早部分传递给titlesTagArreys.

尝试使用init您的数组

self.titlesTagArreys = [NSMutableArray arrayWithArray:@[@"...",@"...",...]];

@property(nonatomic, copy) 为你的 NSMutableArray 创建一个不可变的副本。尝试 @property(nonatomic, retain) 而不是复制

于 2013-08-06T13:22:18.770 回答
5

我也认为titlesTagArreys由于一些代码更改,您不是可变数组

尝试添加:NSLog(@"%@", NSStringFromClass(self.titlesTagArreys.class));检查你使用什么类

-(void)removeButtonWasPressed:(NSString*)tagTitle{

  NSLog(@"%@", NSStringFromClass(self.titlesTagArreys.class));

  [self.titlesTagArreys removeObject:tagTitle];
}
于 2013-08-06T13:27:12.030 回答
0

我遇到了同样的问题,并且了解到您必须覆盖可变数组属性的设置器mutableCopy并调用. 您将在此处的 Stack Overflow 中找到答案。

于 2013-08-06T14:26:51.050 回答
0

titleTagArray 不是 NSMutableArray。这是因为,在日志中我们可以看到 [__NSArrayI removeObject:] 无法识别的选择器发送到实例 0x1c53bbd0。NSArrayI 也用于 NSArray,NSArrayM 用于 NSMutableArray。您必须使用 NSArray 初始化 mutablearray,因此出现异常。

于 2013-08-07T04:12:31.070 回答