Ios 这怎么可能呢?UITableView数据源计数异常行为

Ios 这怎么可能呢?UITableView数据源计数异常行为,ios,objective-c,uitableview,Ios,Objective C,Uitableview,我不明白这是怎么可能的,也不明白为什么会这样。谁能给我一个主意吗 我添加了更多的代码来帮助您解决这个问题,但是,我不确定额外的代码会有什么帮助 NSMutableArray *messages = [[NSMutableArray alloc] init]; PFUser *currentUser = [PFUser currentUser]; PFQuery *query = [PFQuery queryWithClassName:@"message"]; [query whereKey

我不明白这是怎么可能的,也不明白为什么会这样。谁能给我一个主意吗

我添加了更多的代码来帮助您解决这个问题,但是,我不确定额外的代码会有什么帮助

NSMutableArray *messages = [[NSMutableArray alloc] init];

PFUser *currentUser = [PFUser currentUser];

PFQuery *query = [PFQuery queryWithClassName:@"message"];

[query whereKey:@"receiver" equalTo:currentUser.objectId];

[query orderByDescending:@"createdAt"];

[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {

    if (!error && objects !=NULL) {
        NSMutableArray *listOfLastMsgs = [[NSMutableArray alloc] init];
        for (PFObject *object in objects) {
            Boolean *tester = false;
            for(int i = 0;i<listOfLastMsgs.count;i++){


                if([[object objectForKey:@"sender"] isEqualToString:[[listOfLastMsgs objectAtIndex:i] objectForKey:@"sender"]]){
                    tester = true;
                }
            }
            if(!tester){
                [listOfLastMsgs addObject:object];
            }
        }

        for(int i = 0;i<listOfLastMsgs.count;i++){
            NSString *s = [[listOfLastMsgs objectAtIndex:i] objectForKey:@"message"];

            if(s.length > 80){
                s = [s substringToIndex:80];
            }
            [messages addObject:s];

        }

        NSLog(@"in did load %lu", (unsigned long)messages.count);
        [self.tableView reloadData];
    } else {
        // Log details of the failure
        NSLog(@"Error: %@ %@", error, [error userInfo]);
    }
}];


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.

NSLog(@"in number of rows %lu", (unsigned long)messages.count);
return messages.count;
}

假设大量代码位于
viewDidLoad
中,问题很简单-您在
viewDidLoad
中设置了一个本地
messages
变量,并且您的
numberOfRowsInSection
引用了一个未初始化的
messages
实例变量

假设您确实有一个名为
messages
的ivar,在
viewDidLoad
中,更改:

NSMutableArray *messages = [[NSMutableArray alloc] init];
致:


什么是
消息
?它是如何声明的?多看一点类会很有用。我们不知道还有什么是处理您的消息数组,这可能会影响这一点。例如,数组在哪里初始化?这是两种方法的实际完整代码吗?在viewDidLoad中。。。这样地。。。。NSMutableArray*消息=[[NSMutableArray alloc]init];我将添加更多的代码。。。
NSMutableArray *messages = [[NSMutableArray alloc] init];
messages = [[NSMutableArray alloc] init];