NSlogging和NSString难题

时间:2011-09-15 22:28:18

标签: objective-c ios ipad uitableview

我仍然相当新,因为这是我的第一个项目。但我完全相信堆栈溢出社区,因为你们之前都曾帮助过我。

我对你们所有人都有一个相当有趣的难题。我称之为标准:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

在我的tableview中让它推送一个视图控制器,并更新string的值(下面的方法)(字符串中的更改是通过不同的方法进行NSLogged):

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
appDelegate.baseURL = nil;
musicInteractionController = [[xSheetMusicViewController alloc]init];
if (indexPath.row == 0 && indexPath.section == 0) {
    appDelegate.baseURL = @"mussette.pdf";
    [self.navigationController pushViewController:musicInteractionController animated:YES];
}
else if (indexPath.row == 1 && indexPath.section == 0) {
    appDelegate.baseURL = @"Importing PDF's.pdf";
    [self.navigationController pushViewController:musicInteractionController animated:YES];

}
else if (indexPath.row == 2 && indexPath.section == 0) {
   appDelegate.baseURL = @"Example.pdf";
    [self.navigationController pushViewController:musicInteractionController animated:YES];

}
else if (indexPath.section == 1) {
    appDelegate.baseURL = [[ivContentsList objectAtIndex:indexPath.row]lastPathComponent];
    [self.navigationController pushViewController:musicInteractionController animated:YES];

}
[musicInteractionController release]; musicInteractionController = nil;
appDelegate.baseURL = nil;

}

我的代码中没有错误,警告或内存泄漏。并且由新视图控制器读取的字符串更改将更新视图以显示当前PDF。它工作正常,但一直反复显示相同的PDF,尽管NSLog值发生了变化。如果它有帮助,我使用的是iOS模拟器,而不是真正的设备。

这是推送第一个单元格后的NSLog样本,然后是第二个单元格(忽略nil视图控制器日志,我认为这是一个错误。另外,下行日志来自第二个视图中的私有方法,所以它也可以被忽略。对那些可以解决CGContextClipToRect:无效上下文0x0警告的人来说是一个奖励):

 2011-09-15 16:24:23.731 SheetMuse[43068:b603] value - (null)
Sep 15 16:24:27-MacBook SheetMuse[43068] <Error>: CGContextClipToRect: invalid context 0x0
Sep 15 16:24:27-MacBook SheetMuse[43068] <Error>: CGContextGetClipBoundingBox: invalid context 0x0
Sep 15 16:24:27-MacBook SheetMuse[43068] <Error>: CGContextConcatCTM: invalid context 0x0
Sep 15 16:24:27-MacBook SheetMuse[43068] <Error>: CGBitmapContextCreateImage: invalid context 0x0
2011-09-15 16:24:27.050 SheetMuse[43068:b603] Application tried to push a nil view controller on target <UINavigationController: 0x4c5e220>.
2011-09-15 16:24:27.069 SheetMuse[43068:b603] value - mussette.pdf
2011-09-15 16:24:27.072 SheetMuse[43068:b603] Application tried to push a nil view controller on target <UINavigationController: 0x4e74620>.
2011-09-15 16:24:27.097 SheetMuse[43068:b603] value - mussette.pdf
2011-09-15 16:24:33.944 SheetMuse[43068:b603] Down
Sep 15 16:24:36 MacBook-SheetMuse[43068] <Error>: CGContextClipToRect: invalid context 0x0
Sep 15 16:24:36 MacBook-SheetMuse[43068] <Error>: CGContextGetClipBoundingBox: invalid context 0x0
Sep 15 16:24:36 MacBook-SheetMuse[43068] <Error>: CGContextConcatCTM: invalid context 0x0
Sep 15 16:24:36 MacBook-SheetMuse[43068] <Error>: CGBitmapContextCreateImage: invalid context 0x0
2011-09-15 16:24:36.587 SheetMuse[43068:b603] Application tried to push a nil view controller on target <UINavigationController: 0x4c54bf0>.
2011-09-15 16:24:36.588 SheetMuse[43068:b603] value - Importing PDF's.pdf
2011-09-15 16:24:36.590 SheetMuse[43068:b603] Application tried to push a nil view controller on target <UINavigationController: 0x4c50790>.
2011-09-15 16:24:36.591 SheetMuse[43068:b603] value - Importing PDF's.pdf

提前致谢。

2 个答案:

答案 0 :(得分:2)

  

这是推送第一个单元格后的NSLog示例,然后是第二个单元格   (忽略nil视图控制器日志,我认为这是一个bug。而且,   down Log来自第二个视图中的私有方法,因此它也可以   被忽略了。对于那些可以解决CGContextClipToRect:无效上下文0x0警告的人来说是一个奖励

我知道认为这些不相关是很诱人的,但重要的是要记住,虫子就像雪球一样 - 当它们开始滚动时会积累更多的雪。

musicInteractionController = [[xSheetMusicViewController alloc]init];

日志似乎表明你的musicInteractionController是零。我没有看到你的xSheetMusicViewController的初始化代码(顺便说一句,我建议使用Apple的类和变量命名的建议:类以大写开头,变量以小写开头)我不能说为什么,但是UIViewController的子类应该可能use - (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle to init。

我的猜测是,如果你解决了nil视图控制器,你将解决其他错误。

<强>更新

From Apple's docs:

  

这是此类的指定初始值设定项。

     

您指定的nib文件不会立即加载。它载入了   第一次访问视图控制器的视图。如果你想   加载nib文件后执行其他初始化   覆盖viewDidLoad方法并在那里执行任务。

     

如果为nibName参数指定nil,则必须覆盖   loadView方法并在那里创建您的视图,或者您必须提供   您的包中的nib文件的名称(不带.nib扩展名)   匹配视图控制器类的名称。 (在后一种情况下,   类名称成为存储在nibName属性中的名称。)如果   你不做这些,视图控制器将无法加载它   图。

因此,需要在类的loadView方法中设置所有内容。你能告诉我们你是如何实现这种方法的吗?

答案 1 :(得分:1)

尝试以不同的方式调用索引,因为我之前遇到过这个问题并且通过一些调试我发现当你基于活动视图而不是实际表滚动表时索引会发生变化。

尝试使用以下方法调用索引:

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

并尝试

if (someIndexVar == 0 && someIndexVar.section == 0) {

编辑: 添加

return cell;

每个项目中的每个项目之后,如果每个语句,即:

if (this){
    code
    return cell;
} else if (this){
    code 
    return cell;
} else {
    code
    return cell;
}

大多数人都说这个单元格不需要每次都返回,但它必须从if语句开始,如果选择它只返回单元格,这就解决了我的问题