ios - Obj-c - 将 NSDictionary 添加到 NSMutableArray?
问题描述
我正在尝试使用以下代码将包含一系列键的 NSDictionary 添加到现有 NSMutableArray 中。但是,在运行应用程序时,我在最后一行 ( [self.filtered addObject:nodeData]; ) 上出现崩溃,上面写着:“EXC_BAD_ACCESS”,我不知道为什么?
视图控制器.h
@property (nonatomic, strong) NSMutableArray *filtered;
视图控制器.m
-(void)viewDidLoad {
NSString *targetedUser = [self.messageDataFriends objectForKey:@"uid"];
NSString *universal = @"9506";
NSString *myID = [session user][@"user"][@"uid"];
NSPredicate *p1 = [NSPredicate predicateWithFormat:@"uid ==[cd] %@", targetedUser];
NSPredicate *p2 = [NSPredicate predicateWithFormat:@"targetuser ==[cd] %@", myID];
NSPredicate *p3 = [NSPredicate predicateWithFormat:@"uid ==[cd] %@", myID];
NSPredicate *p4 = [NSPredicate predicateWithFormat:@"targetuser ==[cd] %@", targetedUser];
NSPredicate *p5 = [NSPredicate predicateWithFormat:@"targetuser ==[cd] %@", universal];
NSCompoundPredicate *pIntermediary1 = [NSCompoundPredicate andPredicateWithSubpredicates:@[p1, p2]];
NSCompoundPredicate * pIntermediary2 = [NSCompoundPredicate andPredicateWithSubpredicates:@[p3, p4]];
NSCompoundPredicate * pIntermediary3 = [NSCompoundPredicate andPredicateWithSubpredicates:@[p1, p5]];
NSCompoundPredicate *pFinal = [NSCompoundPredicate orPredicateWithSubpredicates:@[pIntermediary1, pIntermediary2, pIntermediary3]];
_filtered = [self.messages filteredArrayUsingPredicate:pFinal];
}
- (IBAction)sendReply:(id)sender {
NSMutableDictionary *nodeData = [NSMutableDictionary new];
[nodeData setObject:@"messages" forKey:@"type"];
NSDictionary *messageValues = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:sentText, nil] forKeys:[NSArray arrayWithObjects:@"value", nil]];
NSDictionary *finalMessage = [NSDictionary dictionaryWithObject:[NSArray arrayWithObject:messageValues] forKey:@"und"];
[nodeData setObject:finalMessage forKey:@"body"];
self.replyField.text = @"";
NSString *targetedUser = [self.messageData objectForKey:@"uid"];
NSDictionary *targetMessage = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:targetedUser, nil] forKeys:[NSArray arrayWithObjects:@"value", nil]];
NSDictionary *finalUser = [NSDictionary dictionaryWithObject:[NSArray arrayWithObject:targetMessage] forKey:@"und"];
[nodeData setObject:finalUser forKey:@"field_targetuser"];
[nodeData setValue: @"Re:" forKey:@"title"];
[self.filtered addObject:nodeData];
NSLog(@"SHOW UPDATED FILTERED %@", self.filtered);
}
解决方案
我假设这条线
_filtered = [self.messages filteredArrayUsingPredicate:pFinal];
是问题所在。您正在直接访问 ivar,避免调用属性设置器。这不会增加保留计数。替换为 self.filtered = [self.messages filteredArrayUsingPredicate:pFinal];
推荐阅读
- node.js - 如何使用 babel 构建非 js 文件?
- php - 填写多个值php mysql
- ios - iOS 10 顶部的 UITableView 空间?
- linux - 从 Windows 上的 spark 存储文件到 HDFS
- php - 访问 WC() 以在 ajax 回调中获取购物车内容
- swift - 我在哪里可以找到媒体按钮以将我的资产放到情节提要中
- oop - 支持字段公开时自动生成getter和setter的目的是什么
- python - Django中的简单查询
- java - ncpu.s 文件加载到错误的 'utf-8' android studio
- c# - .netcore Web 应用程序因“提供给函数的缓冲区太小”错误而失败