[英]Adding object into NSMutableArray , crashing the App
您可以直接将数据放入数组,无需强制转换。
if(self.RFTagData != nil){
self.RFTagData = [dict objectForKey:@"obj"];
}
NSLog(@"array %@", RFTagData);
这会将所有数据添加到obj
键下的数组中。
更新:
正如用户 rmaddy & danh 所建议的,所以这里需要关注关于valueForKey
和objectForKey
方法的使用以及nil check on the array
这一点。
objectForKey
:这是一个NSDictionary
方法。 NSDictionary 是一个类似于NSArray
(集合)的集合类,除了使用像NSArray
这样的索引,它使用键来区分项目。 键是您提供的任意字符串。 没有两个对象可以有相同的键(就像NSArray
没有两个对象可以有相同的索引)。
valueForKey
:这是一种 KVC 方法。 它适用于任何类。 valueForKey:允许您使用字符串作为名称来访问属性。
这里两者都返回与给定键关联的值,因此这里使用valueForKey
方法为您提供了解决方案。 但在这种情况下,使用objectForKey
是更优选的使用方式。
检查数组中的null
值,这些null
值看起来像文字@"<null>"
而不是NSNull
对象,通常用于表示 Cocoa 集合中的nil
s。 您可以使用NSArray's
filteredArrayUsingPredicate
方法将它们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);
NSData *data=[dict objectForKey:@"obj"]; [self.RFTagData addObject:data];
你可以通过这样做直接添加数据对象。而不是转换为字符串。
将对象添加到数组时,不要将 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];
.....
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.