将对象添加到NSMutableArray中,导致应用程序崩溃

时间:2017-02-07 14:28:20

标签: ios objective-c

enter image description here

Dict来自通知,从dict中取出NSData并将其添加到NSMutableArray会导致应用程序崩溃。

偶尔会发生这次崩溃。

3 个答案:

答案 0 :(得分:0)

您可以直接获取数据到阵列,无需强制转换。

if(self.RFTagData != nil){
    self.RFTagData = [dict objectForKey:@"obj"];
}

NSLog(@"array %@", RFTagData);

这会将所有数据添加到obj键下的数组中。

<强>更新

作为用户rmaddy&amp; danh建议,所以这里需要关注使用valueForKeyobjectForKey方法以及nil check on the array的这一点。

objectForKey :这是NSDictionary方法。 NSDictionary是一个类似于NSArray(集合)的集合类,除了使用像NSArray这样的索引之外,它使用键来区分项目。键是您提供的任意字符串。没有两个对象可以具有相同的密钥(就像NSArray中没有两个对象可以具有相同的索引一样)。

valueForKey :这是一种KVC方法。它适用于任何类。 valueForKey:允许您使用字符串作为其名称来访问属性。

这里两者都返回与给定键关联的值,因此这里使用valueForKey方法为您提供了解决方法。但使用objectForKey是更优选的使用方法在这种情况下。

检查数组中的null值是否与文字@"<null>"完全相同,而不是NSNull对象通常用于表示Cocoa集合中的nil。您可以使用NSArray's filteredArrayUsingPredicate方法将其过滤掉:

NSPredicate *pred = [NSPredicate predicateWithBlock:^BOOL(id value, NSDictionary *unused) {
   return ![str isEqualToString:@"<null>"];
}];

NSArray *filteredAry = [self.RFTagData filteredArrayUsingPredicate:pred];

NSLog(@"array with non null vals %@", filteredAry);

答案 1 :(得分:0)

NSData * data = [dict objectForKey:@“obj”]; [self.RFTagData addObject:data];

您可以直接添加数据对象。而不是转换为字符串。

答案 2 :(得分:0)

在将对象添加到数组中时,不要将NSData类型转换为NSString。您应该先将NSData转换为NSString,然后将其添加到数组中。 将NSData用于NSString并将NSString添加到数组中的更好方法。

NSData *data=[dict objectForKey:@"obj"];
NSString *strData = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
if(data != nil self.RFTagData != nil)
{
   [self.RFTagData addObject:strData];
   .....
}

Example for Converting Data into String