我在firstviewcontroller中声明了一个数组,比如
@interface ClassesList : UIViewController
{
NSMutableArray *className;
}
@property (retain,nonatomic) NSMutableArray *className;
并定义一个委托方法,将对象添加到下一个视图控制器中的数组
@protocol Createclass <NSObject>
-(void)addnewObject:(NSString*)string;;
@end
并发送带有textfiled字符串的字符串
[self.delegate addnewClass:_className.text];
在firstviewcontroller中调用此metod时显示错误
NSInvalidArgumentException', reason: '-[__NSArrayI addObject:]: unrecognized selector sent to instance
这是我的编辑
-(void)addnewClass:(NSString *)string
{
[className addObject:string];
[self.table reloadData];
}
我从plist文件中获取一个存储类列表的字典
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"classesArray.plist"];
NSDictionary *StudentDict=[[NSDictionary alloc]initWithContentsOfFile:path];
NSArray *See = StudentDict[@"alldata"];
className = [[NSMutableArray alloc]init];
className= [See valueForKey:@"class_name"];
答案 0 :(得分:2)
您看到的错误消息:
reason: '-[__NSArrayI addObject:]: unrecognized selector sent to instance
意味着你有一个不可变数组并且你试图改变它(调用addObject:
),它没有实现该方法。
您还没有显示所有委托实现,但这表明它工作正常,问题是您已将className
设置为不可变而不是可变数组。
下面:
className = [[NSMutableArray alloc]init];
className= [See valueForKey:@"class_name"];
您创建一个空的可变数组,然后用不可变数组替换它(像这样的加载总是返回不可变对象)。
您应该删除第一行并更改第二行以获取mutableCopy
或使用属性列表序列化API,该API允许您创建可变容器和叶子。
答案 1 :(得分:0)
如果[请参阅valueForKey:@“class_name”]包含数组,那么这是您的错误原因:
[See valueForKey:@"class_name"];
返回不可变数组。
替换:
className = [[NSMutableArray alloc]init];
className= [See valueForKey:@"class_name"];
使用:
className= [NSMutableArray arrayWithArray:[See valueForKey:@"class_name"]];
你应该没事。