【问题标题】:NSLog invalid in XcodeNSLog 在 Xcode 中无效
【发布时间】:2011-10-24 11:05:47
【问题描述】:

我困惑了很久。在我的项目中,nslog 是无效的,比如:


 NSArray *arr = [NSArray arrayWithObjects:@"a",@"b",nil];

NSLog(@"%@",arr);

在控制台中没有结果。在调试器中,我可以在本地看到arr,当我选择:“将描述打印到控制台”时,它在控制台中显示为:

Printing description of arr:
(gdb) 

在我的项目中,我使用了一些用 C&C++ 构建的库,并将它们添加为框架。我发现在我创建一个 pthread 并使用 lib 做某事后,NSlog 总是变得无效。 我对此一无所知,可以提供任何提示吗?

谢谢!

【问题讨论】:

  • 所以NSLog 在主线程中工作,但在其他线程中不工作?还是到处都失败了?
  • @Deepak,在我使用 lib 之前,NSLog 在主线程和辅助线程中都能正常工作。当我使用 lib 创建 pthread 时,NSLog 在任何地方都有效。最重要的是在调试器中我可以看到变量,但不能打印到控制台。
  • 如果将NSLog() 替换为fprintf()stderr 是否有效?
  • @Bavarious,它也失败了。我的代码:'code'fprintf(stderr, "c"); (对吧?)。
  • 应该可以的。我不确定问题的原因是什么。可能是库对stderr 做了一些坏事,从而阻止您的代码将其用于输出。

标签: ios nslog


【解决方案1】:

您可以尝试清理(shift+command+k)您的项目。 它对我有用。

【讨论】:

    【解决方案2】:

    试试这个方法

    for(int i=0; i<[arr length]; ++i)
         NSLog(@"%@",arr[i]);
    

    【讨论】:

    • 通常,数组可以像OP描述的代码行一样显示。 @scorpiozj 行中的 nil 部分可能会混淆 NSLog?
    • @Joetjah,我不这么认为。因为 %@ 代表对象,我在另一个项目中尝试了它,它可以工作。
    • 你的代码必须有效,我找例子,一切都正确
    • 所以不是每个人都必须点击该链接,ViTo 的道具:这适用于 NSArrays(以及 NSDictionaries、NSSets 等)。如果您有一个普通的 C 数组,则必须编写一个循环来打印每个元素。 (这也假设您知道数组的大小。) %@ 格式说明符,更具体地说,使用对象的“描述”方法的输出。大多数 Foundation 和 AppKit 类都实现了此方法,因此您可以使用它来打印各种对象并获得有意义的输出。 (例如,-[NSArray description] 返回一个由其所有元素的描述组成的 NSString。)
    • 没有-[NSArray length];无法通过[] 访问NSArray 元素;如果问题中的代码不正确,那么答案代码(如果它是正确的)就没有理由起作用。
    猜你喜欢
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多