使用自定义委托函数将对象添加到nsmutablearray给出错误

时间:2014-12-31 10:29:04

标签: objective-c nsmutablearray

我在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"];

2 个答案:

答案 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"]];

你应该没事。