2014-12-31 78 views
-1

我声明了在firstviewcontroller阵列等添加对象,具有自定义委托功能给错误

@interface ClassesList : UIViewController 
{ 
    NSMutableArray *className; 
} 
@property (retain,nonatomic) NSMutableArray *className; 

并限定委托方法在下一视图控制器对象添加到数组的NSMutableArray

@protocol Createclass <NSObject> 

-(void)addnewObject:(NSString*)string;; 

@end 

并发送字符串与文本文件的字符串

[self.delegate addnewClass:_className.text]; 

while calling this met OD在firstviewcontroller它显示错误

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

您能否在您的firstViewController中发布 - (void)addnewObject:(NSString *)字符串的代码 – AntonijoDev

+0

Adn yout协议方法被称为addnewObject而不是addnewClass,所以它应该是[self.delegate addnewObject:_className。文本]; – AntonijoDev

+0

@AntonijoDev对不起addnewObject只是为发布问题而改变 – user3595019

回答

0

如果[见valueForKey:@ “CLASS_NAME”]包含数组,那么这是你的错误原因:

[See valueForKey:@"class_name"]; 

收益不变的阵列。

替换:

className = [[NSMutableArray alloc]init]; 
className= [See valueForKey:@"class_name"]; 

有:

className= [NSMutableArray arrayWithArray:[See valueForKey:@"class_name"]]; 

,你应该罚款。

+0

tnx u救了我很多 – user3595019

+0

没有pob,当你赚足够的代表,请接受这个答案,thx – AntonijoDev

2

错误信息列表的字典你看到:

reason: '-[__NSArrayI addObject:]: unrecognized selector sent to instance 

意味着你有一个不可改变的数组,并且你试图对它进行改变(调用addObject:),并且它没有实现该方法。

您还没有表现出所有的委托执行的,但是这将表明它工作正常,而这个问题是你已经设置className不可变的,而不是一个可变的数组。


这里:

className = [[NSMutableArray alloc]init]; 

className= [See valueForKey:@"class_name"]; 

您创建一个空的可变数组,然后用一个不变的阵列(加载像总是返回不可变对象)替换它。

您应该删除第一行并更改第二行以获得mutableCopy或使用属性列表序列化API,该API允许您创建可变集装箱和树叶。

+0

看看我声明的className – user3595019

+0

声明并不意味着这是它指向如果你犯了一个错误。它可能是一个指向NSNumber的指针,它不会导致问题,直到你尝试使用它作为一个可变数组... – Wain

+0

所以如何添加到我的类名数组任何建议 – user3595019