Iphone iOS5上的NSIndexPath崩溃
我的应用程序在iOS5之前运行良好 我有一个包含两个部分的分组表视图。每个部分都有一个选项,该选项显示为UITableViewCellAccessoryCheckmark 当我试图确定([LastIndexPath 1 isEqual:indexPath]) 更新:完整相关代码如下: lastIndexPath1和lastIndexPath2都是我在头中声明的nsindepath对象。数字1跟踪第0节中的最后一个indexath,数字2跟踪第1节Iphone iOS5上的NSIndexPath崩溃,iphone,ipad,uitableview,ios5,Iphone,Ipad,Uitableview,Ios5,我的应用程序在iOS5之前运行良好 我有一个包含两个部分的分组表视图。每个部分都有一个选项,该选项显示为UITableViewCellAccessoryCheckmark 当我试图确定([LastIndexPath 1 isEqual:indexPath]) 更新:完整相关代码如下: lastIndexPath1和lastIndexPath2都是我在头中声明的nsindepath对象。数字1跟踪第0节中的最后一个indexath,数字2跟踪第1节 - (void)viewDidLoad {
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
//Initialize the array.
listOfItems = [[NSMutableArray alloc] init];
NSArray *fontName = [NSArray arrayWithObjects:@"Baskerville", @"Palatino", @"Times New Roman", @"Verdana", nil];
NSDictionary *fontNameInDict = [NSDictionary dictionaryWithObject:fontName forKey:@"FontOptions"];
NSArray *fontSize = [NSArray arrayWithObjects:@"Der var engang", @"Der var engang", @"Der var engang", @"Der var engang", @"Der var engang", @"Der var engang", @"Der var engang", @"Der var engang", @"Der var engang", @"Der var engang", @"Der var engang", @"Der var engang", nil];
NSDictionary *fontSizeInDict = [NSDictionary dictionaryWithObject:fontSize forKey:@"FontOptions"];
[listOfItems addObject:fontNameInDict];
[listOfItems addObject:fontSizeInDict];
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
//SET SKRIFTTYPE
NSString *neverOpendFonts1 = [prefs objectForKey:@"neverOpendFonts1"];
if (![neverOpendFonts1 isEqualToString:@"1"]) {
lastIndexPath1 = [NSIndexPath indexPathForRow:1 inSection:0];
UITableViewCell *newCell = [myTableView cellForRowAtIndexPath:lastIndexPath1];
newCell.accessoryType = UITableViewCellAccessoryCheckmark;
NSString *lastIndexPathString1 = [NSString stringWithFormat:@"1"];
[prefs setObject:lastIndexPathString1 forKey:@"lastIndexPath1"];
NSString *fontName = [NSString stringWithFormat:@"Palatino"];
[prefs setObject:fontName forKey:@"fontName"];
neverOpendFonts1 = [NSString stringWithFormat:@"1"];
[prefs setObject:neverOpendFonts1 forKey:@"neverOpendFonts1"];
[prefs synchronize];
NSLog(@"Har aldrig været åbnet - font options");
}
else
{
NSInteger row = [[prefs objectForKey:@"lastIndexPath1"] intValue];
NSLog(@"FONT ROW: %i", row);
lastIndexPath1 = [NSIndexPath indexPathForRow:row inSection:0];
UITableViewCell *newCell = [myTableView cellForRowAtIndexPath:lastIndexPath1];
newCell.accessoryType = UITableViewCellAccessoryCheckmark;
}
//SET SKRIFT STØRRELSE
NSString *neverOpendFonts2 = [prefs objectForKey:@"neverOpendFonts2"];
if (![neverOpendFonts2 isEqualToString:@"1"]) {
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
lastIndexPath2 = [NSIndexPath indexPathForRow:2 inSection:1];
UITableViewCell *newCell2 = [myTableView cellForRowAtIndexPath:lastIndexPath2];
newCell2.accessoryType = UITableViewCellAccessoryCheckmark;
NSString *lastIndexPathString2 = [NSString stringWithFormat:@"2"];
[prefs setObject:lastIndexPathString2 forKey:@"lastIndexPath2"];
NSString *fontSize = [NSString stringWithFormat:@"24.0"];
[prefs setObject:fontSize forKey:@"fontSize"];
neverOpendFonts2 = [NSString stringWithFormat:@"1"];
[prefs setObject:neverOpendFonts2 forKey:@"neverOpendFonts2"];
[prefs synchronize];
}
else {
lastIndexPath2 = [NSIndexPath indexPathForRow:0 inSection:1];
UITableViewCell *newCell3 = [myTableView cellForRowAtIndexPath:lastIndexPath2];
newCell3.accessoryType = UITableViewCellAccessoryCheckmark;
NSString *lastIndexPathString2 = [NSString stringWithFormat:@"0"];
[prefs setObject:lastIndexPathString2 forKey:@"lastIndexPath2"];
NSString *fontSize = [NSString stringWithFormat:@"16.0"];
[prefs setObject:fontSize forKey:@"fontSize"];
neverOpendFonts2 = [NSString stringWithFormat:@"1"];
[prefs setObject:neverOpendFonts2 forKey:@"neverOpendFonts2"];
[prefs synchronize];
}
}
else
{
NSInteger row2 = [[prefs objectForKey:@"lastIndexPath2"] intValue];
NSLog(@"FONTSIZE ROW: %i", row2);
lastIndexPath2 = [NSIndexPath indexPathForRow:row2 inSection:1];
UITableViewCell *newCell2 = [myTableView cellForRowAtIndexPath:lastIndexPath2];
newCell2.accessoryType = UITableViewCellAccessoryCheckmark;
}
[myTableView reloadData];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
//Number of rows it should expect should be based on the section
NSDictionary *dictionary = [listOfItems objectAtIndex:section];
NSArray *array = [dictionary objectForKey:@"FontOptions"];
return [array count];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return [listOfItems count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
// cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
// Set up the cell...
//First get the dictionary object
NSDictionary *dictionary = [listOfItems objectAtIndex:indexPath.section];
NSArray *array = [dictionary objectForKey:@"FontOptions"];
NSString *cellValue = [array objectAtIndex:indexPath.row];
cell.textLabel.text = cellValue;
if (indexPath.section == 0)
{
if([lastIndexPath1 isEqual:indexPath])
{
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else
{
cell.accessoryType = UITableViewCellAccessoryNone;
}
switch (indexPath.row) {
case 0:
{
cell.textLabel.font = [UIFont fontWithName:@"Baskerville" size:24];
}
break;
case 1:
{
cell.textLabel.font = [UIFont fontWithName:@"Palatino" size:24];
}
break;
case 2:
{
cell.textLabel.font = [UIFont fontWithName:@"Times New Roman" size:24];
}
break;
case 3:
{
cell.textLabel.font = [UIFont fontWithName:@"Verdana" size:24];
}
break;
}
}
if (indexPath.section == 1) {
if([lastIndexPath2 isEqual:indexPath])
{
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else
{
cell.accessoryType = UITableViewCellAccessoryNone;
}
switch (indexPath.row) {
case 0:
{
cell.textLabel.font = [UIFont fontWithName:@"Palatino" size:16];
}
break;
case 1:
{
cell.textLabel.font = [UIFont fontWithName:@"Palatino" size:20];
}
break;
case 2:
{
cell.textLabel.font = [UIFont fontWithName:@"Palatino" size:24];
}
break;
case 3:
{
cell.textLabel.font = [UIFont fontWithName:@"Palatino" size:28];
}
break;
case 4:
{
cell.textLabel.font = [UIFont fontWithName:@"Palatino" size:32];
}
break;
case 5:
{
cell.textLabel.font = [UIFont fontWithName:@"Palatino" size:36];
}
break;
case 6:
{
cell.textLabel.font = [UIFont fontWithName:@"Palatino" size:40];
}
break;
case 7:
{
cell.textLabel.font = [UIFont fontWithName:@"Palatino" size:44];
}
break;
case 8:
{
cell.textLabel.font = [UIFont fontWithName:@"Palatino" size:48];
}
break;
case 9:
{
cell.textLabel.font = [UIFont fontWithName:@"Palatino" size:52];
}
break;
case 10:
{
cell.textLabel.font = [UIFont fontWithName:@"Palatino" size:56];
}
break;
case 11:
{
cell.textLabel.font = [UIFont fontWithName:@"Palatino" size:60];
}
break;
}
}
return cell;
}
lastIndexPath1是如何定义的,具有哪些属性?。您能在整个类中尝试使用self.lastIndexPath1吗 您没有保留最后一个索引路径
lastIndexPath1 = [NSIndexPath indexPathForRow:row inSection:0];
[NSIndexPath indexPathforRow:row inSection:0]返回一个自动释放的对象,在下一个事件循环结束时,如果该对象未被保留,则会将其释放
试一试
我假设您没有在Xcode 4和ARC下编译
您确实应该使用属性访问器来处理lastIndexPath1变量的内存管理
@property (nonatomic, retain) NSIndexPath lastIndexPath1;
然后@synthesis lastIndexPath1代码>
每当您分配lastIndexPath时,请使用self.lastIndexPath=[nsindepath….]
控制台是否会告诉您有关错误的任何信息?或者,至少,错误是SIGABRT还是EXC_坏访问?是的,我得到了EXC_坏访问。对不起,我不太清楚。。。如果我注释掉If([lastIndexPath1 isEqual:indexPath])函数,应用程序运行良好…您到底在哪里进行比较,以及如何存储值?我在:-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath中进行比较。。。如果我用整数设置值,我也会得到错误。IOS5上只有一个问题:lastIndexPath1是如何定义的,具有哪些属性?。您可以尝试在整个类中使用self.lastIndexPath1吗?正如richerd所评论的,问题的根源在于保留对象。self.indepath=。。。确保在属性标记为“保留”时调用保留设置器-如果是非属性,则应保留/释放您自己。iOS 5.0上支持应用程序时,我也遇到了同样的问题,谢谢各位。
@property (nonatomic, retain) NSIndexPath lastIndexPath1;