-[__NSArrayI replaceObjectAtIndex:withObject:]: 无法识别的选择器发送到实例
Posted
技术标签:
【中文标题】-[__NSArrayI replaceObjectAtIndex:withObject:]: 无法识别的选择器发送到实例【英文标题】:-[__NSArrayI replaceObjectAtIndex:withObject:]: unrecognized selector sent to instance 【发布时间】:2012-08-03 00:44:53 【问题描述】:我有一个 Mutable NSArray 存储对象类型(ids - NSNumber、NSString),它将存储数字(1、2、3、4 等)、操作(+、-、/、* 等),和变量(x、y、z 等)。我将变量和相关值存储在 NSDictionary 中,键是等于 x、y、z 的 NSString,NSNumber 值分别为 5、5、2。我想用存储在我的 NSDictionary 中的实际值替换我的 NSArray 中的变量。尝试替换对象时,我不断收到以下错误。请帮忙。
NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:
[NSNumber numberWithDouble:5],@"x",
[NSNumber numberWithDouble:5],@"y",
[NSNumber numberWithDouble:2],@"z",
nil];
+ (double)runProgram:(id)program
usingVariableValues:(NSDictionary *)variableValues;
// introspection - ensure program is NSArray and variableValues is NSDictionary
if ([program isKindOfClass:[NSArray class]] && [variableValues isKindOfClass: [NSDictionary class]])
// array for program stack
NSMutableArray *stack = [program copy];
// Loop to replace variables with actual values in NSDictionary
for (NSUInteger i = 0; i < [stack count]; i++)
NSLog(@"object at index = %@", [stack objectAtIndex:i]);
if ([[stack objectAtIndex:i] isKindOfClass:[NSString class]] && [[stack objectAtIndex:i] isEqualToString: @"x"])
// replace variable with value in corresponding value in dictionary
NSNumber *numberKeyValue = [variableValues objectForKey:@"x"];
[stack replaceObjectAtIndex:i withObject:numberKeyValue];
return 0
【问题讨论】:
【参考方案1】:NSArray 的copy
方法总是返回一个不可变数组,不管原始数组是可变的还是不可变的。如果你想要一个可变副本,你需要使用mutableCopy
。 (这是 Cocoa 的约定。NSString、NSDictionary 以及通常具有可变和不可变变体的任何类都将以相同的方式工作。)
【讨论】:
当。我没有在任何地方读过。我无法告诉你我花了多少时间试图找出一个简单的事实。谢谢一百万伙计。 @5lbBass:如果您需要查找它,它位于文档中的几个不同位置。例如,来自 NSCopying 文档:“如果考虑‘不可变与可变’适用于接收对象,则返回的副本是不可变的”以上是关于-[__NSArrayI replaceObjectAtIndex:withObject:]: 无法识别的选择器发送到实例的主要内容,如果未能解决你的问题,请参考以下文章