【问题标题】:Mixing Objective C and C in switch statement trying to add a subview iphone SDK在 switch 语句中混合 Objective C 和 C 试图添加一个子视图 iphone SDK
【发布时间】:2010-07-28 10:39:02
【问题描述】:

我遇到了一个奇怪的问题。我有一个 for 循环,循环内有一个 switch 语句。 for 循环中的计数器是一个指向原始数组开头的指针,它会自增直到找到“终止符编号”。指向的数组用于构建视图,每个元素代表一个要放入视图的子视图。 代码如下:

    for (self.composizione; *composizione>kFine; composizione++) {
    int c=(int)*composizione;
    NSLog(@"%d",c);
    switch (c) {
        case kForchettaPesce:   case kForchettaNormale:
        {
            NSString *imagePath;
            imagePath=[[NSString alloc]initWithFormat:@"%@/%d.png",[[NSBundle mainBundle]resourcePath],c];
            UIImage *image=[[UIImage alloc]initWithContentsOfFile:imagePath];
            [imagePath release];
            NSLog(@"pippo");
            UIImageView *imageView=[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, image.size.width, image.size.height)];
            imageView.image=image;
            [image release];
            [self.view addSubview:imageView];
            [imageView release];

        break;
        }


        default:
        break;
    }
    NSLog(@"%d",(int)*composizione);



}

调试它我发现它工作得很好,直到它尝试添加子视图。它似乎停留在循环中,并且日志在无限循环中始终显示相同的数据。如果我删除 -addSubview 方法我没有问题,日志语句会显示我希望看到的内容。 我究竟做错了什么? 问候, 安德烈亚

【问题讨论】:

  • 我不得不说我不知道​​为什么它不起作用。尝试创建自己的数组并添加到您创建的数组中的视图怎么样。在 for 循环完成后,将数组中的视图添加到超级视图。它可能会给我们一个线索。
  • 顺便说一句,您可以考虑在您的代码中使用英语。其他人更容易理解。
  • 谢谢 Ron 我已经指出了错误,我在 loadView 方法中使用它。我正在使用笔尖,所以我将其删除并复制到 viewDidLoad,现在一切正常。

标签: iphone c objective-c loops subview


【解决方案1】:

我不确定您要做什么,但可能是您混淆了您的类型:

for (self.composizione; *composizione>kFine; composizione++) {
    int c=(int)*composizione;
  • for( 之后的self.composizione 是多余的,它什么都不做。应该吗?
  • *composizionecomposizione 指向的值,应该是int*(是吗?)
  • composizione++指针 推进到内存中的下一个位置,而不是 *composizione

简而言之:也许您需要(*composizione)++ 而不是composizione++

【讨论】:

  • 您好 mvds,感谢您的建议。对不起,我的代码中的意大利语部分,但我忘了翻译。 1°yes self.composizione 是多余的,但我用于更好的阅读||| 2°是的,几乎 :-) 在现实中是指向 typedef 枚举的指针||| 3°对!我正在滚动一个数组,所以它必须增加指针,而不是值|||无论如何,谢谢,但解决方案更容易(一如既往)。我在 -loadView 方法中使用了那段代码,这对于在 nib 中初始化的视图是不正确的。我正在使用笔尖,所以我将其删除并复制到 viewDidLoad,现在一切正常。
  • 很好,你解决了它。您可以考虑以这样一种方式来编写它,这样它就更不言自明了。 IE。 for(int i=0;comp[i]!=kLast;i++) { }。特别是如果其他人需要阅读它。
猜你喜欢
  • 2015-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多