首页 > 解决方案 > 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);

    }

标签: iosobjective-c

解决方案


我假设这条线

_filtered = [self.messages filteredArrayUsingPredicate:pFinal];

是问题所在。您正在直接访问 ivar,避免调用属性设置器。这不会增加保留计数。替换为 self.filtered = [self.messages filteredArrayUsingPredicate:pFinal];


推荐阅读