在这个看似简单的问题上,我一直在绞尽脑汁。我有一个XYZObject类,我声明:
@property BOOL checked;
在我的View Controller中,我导入了对象,每当我使用'checked'时,应用程序编译得很好,但在使用'checked'的任何地方都会中断,例如:
XYZObject *tableitem = [myDictionary[currentCategory] objectAtIndex:indexPath.row];
if (tableitem.checked) {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
这个工作正常,直到我删除并重新添加了XYZObject类,所以我一直在调试,假设文件路径中的某些东西正在搞砸了。但我可以点击我的VC中的'checked',然后在Quick Help下显示对XYZObject的正确引用。这是确切的错误:
[__NSCFString checked]: unrecognized selector sent to instance
修改/更新:
在一些帮助下,我意识到问题是,当我从ViewController中的手动声明更改数据源到导入Plist时,我完全废弃了我的XYZObject而没有考虑它。这是我宣布我的字典的原始方式:
XYZCategory *category1 = [[XYZCategory alloc]init]; category1.categoryArray = @"First Category"; [categoryArray addObject:category1];
XYZObject *object1 = [[XYZObject alloc]init]; object1.objectName = @"My String"; [objectArray addObject:object1];
myDictionary[category1.categoryArray] = objectArray;
当我切换到Plist时,代码变为:
NSString *path = [[NSBundle mainBundle] pathForResource:@"myDictionaryPlist" ofType:@"plist"];
NSMutableDictionary *plistDictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:path];
objectArray = plistDictionary[@"First Category"];
myDictionary[category1.categoryArray] = objectArray;
然后作为参考,XYZObject进行以下声明:
@property NSString *objectName;
@property BOOL checked;
因此字典问题是我只是拉取objectArray的直接字符串,而不是一组XYZObjects。我将继续测试,但我很确定我必须根据从Plist中提取的内容将objectArray重新定义为一组对象。
但我也认为既然我现在正在使用Plist来创建一个字典(它被弹出到一个表中,其中Keys是部分,而值是行),我可以通过一起删除XYZCategory和XYZObject来简化事情。 。不确定这是否可能,但我会朝着它努力。
答案 0 :(得分:3)
正如错误消息所示,tableitem
实际上是NSString
,与您的预期相反。
您可能以错误的方式填充字典。