[__NSCFString superview]:无法识别的选择器发送到实例

时间:2012-11-20 13:19:03

标签: objective-c ios memory nsarray unrecognized-selector

我正在尝试将NSMutableArray *复制到NSArray *中,但它不起作用,它会生成 [__ NSCFString superview]:无法识别的选择器发送到实例错误。这是代码:

//where gc is a NSDictionary*, recentKey is a NSString*, and _objects is a NSArray*
//gc is an singleton is used to save chache data, with NSKeyedUnarchiver class
//_objects is used to reload the UITableView's data

NSArray *savedNews = [[NSArray alloc] initWithArray:[gc objectForKey:recentkey]];

//this not works...why??
_objects = [[NSArray alloc] initWithArray:savedNews];

解决:

是的,正如赫尔曼所说,错误是外在的。 savedNews Array使用带有NSEncoding的类,但出现错误:

- (void)encodeWithCoder:(NSCoder *)encoder {
//...where element was NSString* and not "UIImageView"
// element should be imgView
    if (imgView) [encoder encodeObject:element forKey:@"imgView"];
}

感谢所有人。

2 个答案:

答案 0 :(得分:0)

您应用中的某个位置是获取的NSString对象的超级视图。 我猜你已经为一个需要UIView的东西分配了一个NSString对象。 可能是这样的:

someButton.textLabel = someString; // wrong - but should generate a compiler warning

而不是

someButton.textLabel.text = someString; // correct

这与您的阵列问题没有直接关系。

答案 1 :(得分:0)

首先,检查字典中对象的内容是什么。

NSLog(@"GC Object type for recentkey:%@", [[gc objectForKey:recentkey] class]);

您只能将NSArray传递给initWithArray: 因此,如果该对象不是NSArray,但您希望该对象在数组中。这样做..

id obj = [gc objectForKey:recentkey]; //Because I have no idea what this is
NSArray *savedNews = [NSArray arrayWithObject:obj];