UITableView的有EXT_BAD_ACCESS然后向下滚动(UITableview have

2019-09-28 20:14发布

我有以下的.h文件中的代码

#import <UIKit/UIKit.h>


@interface MessDisViewController : UIViewController {
IBOutlet UITableView * DisTable;
NSMutableArray *massages;
UIActivityIndicatorView * activityIndicator;
CGSize cellSize;
NSXMLParser * friendsParser;
NSMutableDictionary * listOfFriends;
NSString * currentElement;
NSMutableString * currentID, * currentFname;
}
-(void) parseXMLFileAtURL:(NSString *) myUrl;
-(UITableViewCell *) getCellContentView:(NSString *)cellIdentifier;
@end

而在.m文件我有

#import "MessDisViewController.h"
#import "MessageDetailView.h"

@implementation MessDisViewController


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}   

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [massages count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {


static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
    cell = [self getCellContentView:CellIdentifier];

UILabel *lblTemp1 = (UILabel *)[cell viewWithTag:1];
UILabel *lblTemp2 = (UILabel *)[cell viewWithTag:2];

int storyIndex = [indexPath indexAtPosition: [indexPath length] - 1];

NSString *cellValue = [massages objectAtIndex:indexPath.row];
NSString *title = [[[massages objectAtIndex: storyIndex] objectForKey: @"theme"] stringByReplacingOccurrencesOfString:@"*" withString:@" "];
NSLog(@"%@",title);
lblTemp1.text = title;
lblTemp2.text= [NSString stringWithFormat:@"%@, %@",[[massages objectAtIndex: storyIndex] objectForKey: @"login"],[[massages objectAtIndex: storyIndex] objectForKey: @"activate_date"]];
[cellValue release];
return cell;

}

- (UITableViewCell *) getCellContentView:(NSString *)cellIdentifier {

CGRect CellFrame = CGRectMake(0, 0, 300, 60);
CGRect Label1Frame = CGRectMake(10, 10, 290, 25);
CGRect Label2Frame = CGRectMake(10, 33, 290, 25);
UILabel *lblTemp;

UITableViewCell *cell = [[[UITableViewCell alloc] initWithFrame:CellFrame reuseIdentifier:cellIdentifier] autorelease];

//Initialize Label with tag 1.
lblTemp = [[UILabel alloc] initWithFrame:Label1Frame];
lblTemp.tag = 1;
[cell.contentView addSubview:lblTemp];
[lblTemp release];

//Initialize Label with tag 2.
lblTemp = [[UILabel alloc] initWithFrame:Label2Frame];
lblTemp.tag = 2;
lblTemp.font = [UIFont boldSystemFontOfSize:12];
lblTemp.textColor = [UIColor lightGrayColor];
[cell.contentView addSubview:lblTemp];
[lblTemp release];

return cell;
}

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

return 60;
}
- (void) parseXMLFileAtURL:(NSString *) URL{    
massages = [[NSMutableArray alloc] init];

NSURL *xmlURL = [NSURL URLWithString:URL];  
friendsParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL];
[friendsParser setDelegate:self];
[friendsParser setShouldProcessNamespaces:NO];
[friendsParser setShouldReportNamespacePrefixes:NO];
[friendsParser setShouldResolveExternalEntities:NO];
[friendsParser parse];

}

- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError {
NSString * errorString = [NSString stringWithFormat:@"Cannot connect to DataBase  (Error code %i )", [parseError code]];
NSLog(@"error parsing XML: %@", errorString);

UIAlertView * errorAlert = [[UIAlertView alloc] initWithTitle:@"Error loading content" message:errorString delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[errorAlert show];
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{            
if ([elementName isEqualToString:@"Message"]){
    listOfFriends = [[NSMutableDictionary alloc] init];
    [listOfFriends setObject:[attributeDict objectForKey:@"theme"] forKey:@"theme"];
    [listOfFriends setObject:[attributeDict objectForKey:@"login"] forKey:@"login"];
    [listOfFriends setObject:[attributeDict objectForKey:@"activate_date"] forKey:@"activate_date"];
    [listOfFriends setObject:[attributeDict objectForKey:@"message_id"] forKey:@"message_id"];
    [massages addObject:[listOfFriends copy]];
}
}   

- (void)viewDidAppear:(BOOL)animated {
 [super viewDidAppear:animated];
NSString *request=[NSString stringWithFormat: @"http://blablabla"];
[self parseXMLFileAtURL:request];

}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
int storyIndex = [indexPath indexAtPosition: [indexPath length] - 1];
NSString *mesid = [[NSString alloc] initWithString:[[massages objectAtIndex: storyIndex] objectForKey: @"message_id"]];
NSLog(@"%@",mesid);
MessageDetailView *mesdet = [[MessageDetailView alloc]initWithNibName:nil bundle:nil];
mesdet.modalTransitionStyle=UIModalTransitionStyleCrossDissolve;
mesdet.mesid=mesid;
[self presentModalViewController:mesdet animated:YES];

[mesdet release];
mesdet = nil;
}

- (void)parserDidEndDocument:(NSXMLParser *)parser {

[activityIndicator stopAnimating];
[activityIndicator removeFromSuperview];

NSLog(@"all done!");
NSLog(@"stories array has %d items", [massages count]);
[DisTable reloadData];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning]; // Releases the view if it doesn't have a superview
// Release anything that's not essential, such as cached data
}



- (void)dealloc {


[friendsParser release];
[listOfFriends release];    
[super dealloc];
}

@end

当我向下滚动我在模拟器的tableview它有EXT_BAD_ACCESS它为什么会发生,以及如何解决这个问题

Answer 1:

启用NSZombie和测试什么是首先创建错误

Double-click an executable in the Executables group of your Xcode project.
Click the Arguments tab.
In the "Variables to be set in the environment:" section, make a variable called "NSZombieEnabled" and set its value to "YES". 

祝好运



Answer 2:

解决这个问题

int storyIndex = [indexPath indexAtPosition: [indexPath length] - 1];


NSString *title = [[[massages objectAtIndex: storyIndex] objectForKey: @"theme"] stringByReplacingOccurrencesOfString:@"*" withString:@" "];
NSLog(@"%@",title);
lblTemp1.text = title;
lblTemp2.text= [NSString stringWithFormat:@"%@, %@",[[massages objectAtIndex: storyIndex] objectForKey: @"login"],[[massages objectAtIndex: storyIndex] objectForKey: @"activate_date"]];
return cell;


文章来源: UITableview have EXT_BAD_ACCESS then scrolling down