我在应用程序中有一个 singleton ,并且需要使用来自另一个类的arguements来调用它的函数,但是当我调用它时,nil争论被传递...这里是代码:
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
NSLog([Singleton sharedMySingleton].test);
NSDictionary *story = [self.filters objectAtIndex: indexPath.row];
MainAppRecord *record = [[[MainAppRecord alloc]init]retain];
record.name = [story objectForKey:@"Name"];
record.searchUrl = [story objectForKey:@"SearchUrl"];
record.icon = [imageCash objectForKey:indexPath];
[[Singleton sharedMySingleton] changeMainFilterTo:record atPosition:indexOfFilterToChange];
}
这是Singleton.h及其功能:
@interface Singleton : NSObject {
NSMutableArray *mainFilters;
NSString *test;
}
@property (nonatomic, retain) NSMutableArray *mainFilters;
@property (nonatomic, retain) MainAppRecord *filterToChange;
-(void) initWithPlist;
-(void) saveToPlist;
-(void)changeMainFilterTo:(MainAppRecord*)record atPosition:(int)position;
+(Singleton *)sharedMySingleton;
@end
-(void)changeMainFilterTo:(MainAppRecord*)record atPosition:(int)position
{
[mainFilters insertObject:record atIndex:position];
}
该应用程序崩溃
2012-10-20 16:24:52.789 TableView [1957:207] - [__ NSArrayI insertObject:atIndex:]:无法识别的选择器发送到实例0x68410f0
由于
答案 0 :(得分:0)
这与没有被传递的参数或单身人士无关。
您已经在单身人士中声明了一个NSMutableArray属性,但看起来您已经为其分配了一个NSArray。您没有显示您设置它的位置,但看起来您正在从属性列表中加载它 - 默认情况下会创建一个不可变数组。然后尝试插入一个对象 - 这对于不可变数组是可以做的。
确保在创建阵列时创建可变数组。
最简单的方法是找到当前正在分配数组的代码,然后改为制作可变副本:
self.mainFilters = [[NSKeyedUnarchiver unarchiveObjectWithData:other] mutableCopy];