从NSMutableArray中删除对象时崩溃

Lud*_*uda 3 objective-c nsmutablearray

我有一个NSMutableArray我初始化的viewDidLoad:

 self.titlesTagArreys = [@[@"Dollar", @"Euro", @"Pound",@"Dollar longString", @"Euro longStringlongString", @"Pound",@"Dollar", @"Euro", @"PoundlongStringlongString"]mutableCopy];
Run Code Online (Sandbox Code Playgroud)

在.h:

 @property(nonatomic, copy) NSMutableArray* titlesTagArreys;
Run Code Online (Sandbox Code Playgroud)

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

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

这是日志:

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
Run Code Online (Sandbox Code Playgroud)

小智 6

似乎titlesTagArrays列表不是NSMutableArray因为removeObject无法调用.也许你NSArray早先在代码中通过了titlesTagArreys.

尝试init使用

self.titlesTagArreys = [NSMutableArray arrayWithArray:@[@"...",@"...",...]];
Run Code Online (Sandbox Code Playgroud)

@property(非原子,复制)为你创建一个不可变的NSMutableArray副本.尝试@property(非原子,保留)而不是复制


B.S*_*.S. 5

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

尝试添加:NSLog(@"%@", NSStringFromClass(self.titlesTagArreys.class));检查您使用的是哪个类

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

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

  [self.titlesTagArreys removeObject:tagTitle];
}
Run Code Online (Sandbox Code Playgroud)