2015-02-10 70 views
0

我是Android开发者,现在切换到IOS,所以我是IOS开发新手。 我得到这个地方的错误Thread1v:signal SIGABRT

Thread1v:signal SIGABRT。如何解决错误

-(void)updatePostCountUserDefaults{ 

NSMutableDictionary *postCount ; 

NSNumber *count; 

if([[NSUserDefaults standardUserDefaults] objectForKey:@"postCount"] !=nil){ 

    postCount = [[NSUserDefaults standardUserDefaults] objectForKey:@"postCount"]; 

    count = [postCount objectForKey:@"count"]; 

    count = [NSNumber numberWithInt:([count integerValue] + 1.0)]; 

    int n = [count integerValue]; 

    NSLog(@"hey count is : %i" , n); 

    [postCount setObject:count forKey:@"count"]; 

}else{ 

    postCount = [[NSMutableDictionary alloc] init]; 

    count = [NSNumber numberWithInt:1]; 

    [postCount setObject:count forKey:@"count"]; //error- 

} 

[[NSUserDefaults standardUserDefaults] setObject:postCount forKey:@"postCount"]; 

[[NSUserDefaults standardUserDefaults] synchronize]; 
int num = [count integerValue]; 
NSLog(@"count is %i " , num); 
if([count integerValue] == 4 || [count integerValue] == 12){ 
    // show rating screen 

} 

请任何帮助

+0

你能后的完整的堆栈跟踪和错误消息,因为它们显示在控制台? – 2015-02-10 12:11:19

+0

如何拿控制台输出。我不能......? – Piraba 2015-02-10 12:32:00

+0

复制并粘贴控制台输出。 – gnasher729 2015-02-10 12:46:31

回答

1

其实我觉得你标线“错误”不会崩溃。它会导致异常。因为postCount在这种情况下是一个NSDictionary,而不是一个可变的字典。因此,它不能响应setObject:forKey:

编辑:正确的代码:

if([[NSUserDefaults standardUserDefaults] objectForKey:@"postCount"] !=nil){ 
    postCount = [[[NSUserDefaults standardUserDefaults] objectForKey:@"postCount"] mutableCopy]; 
    count = [postCount objectForKey:@"count"]; 
    count = [NSNumber numberWithInt:([count integerValue] + 1.0)]; 
    int n = [count integerValue]; 
    NSLog(@"hey count is : %i" , n); 
    [postCount setObject:count forKey:@"count"]; 
}else{...} 
+0

我宣布为一个字典'NSMutableDictionary * postCount'那么如何? – Piraba 2015-02-10 12:25:09

+0

这里'postCount = [[NSUserDefaults standardUserDefaults] objectForKey:@“postCount”];''objectForKey:'将返回一个'id',它是一个指向任何对象的指针。由于返回类型是'id',并且你声明'postCount'是'NSDictionary *',所以ObjC假定你知道你在做什么,并把返回值视为'NSDictionary'。但实际上,返回的值是'NSNumber'。因此,字典方法不能在'NSNumber'实例上调用。 – Codinfox 2015-02-10 12:29:15

+0

请建议我如何改变它?这是现有的项目,有一些错误。只是想修复它 – Piraba 2015-02-10 12:35:17