cocoa – 我在NSLog上收到警告“Format not a string literal and no format arguments” – 如何在提供的代码中更正此问题?

cocoa – 我在NSLog上收到警告“Format not a string literal and no format arguments” – 如何在提供的代码中更正此问题?,第1张

概述我在以下块中的NSLog调用上收到警告“格式不是字符串文字而没有格式参数”: - (void) alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { NSLog([NSString stringWithFormat:@"%d", buttonIndex]);} 我在这里的另一篇文章 我在以下块中的NSLog调用上收到警告“格式不是字符串文字而没有格式参数”:

- (voID) alertVIEw:(UIAlertVIEw *)alertVIEw clickedbuttonAtIndex:(NSInteger)buttonIndex {    NSLog([Nsstring stringWithFormat:@"%d",buttonIndex]);}

我在这里的另一篇文章中读到这个错误消息表明NSLog的使用不安全.有人能指出我正确格式化字符串的方向吗?

解决方法 从技术上讲,它在您的情况下是一个无效警告,但它告诉您NSLog的格式字符串不是硬编码的,可能是安全性/稳定性问题.修复很简单:

- (voID)alertVIEw:(UIAlertVIEw *)alertVIEw clickedbuttonAtIndex:(NSInteger)buttonIndex{    NSLog(@"%d",buttonIndex);}

如果你很好奇,我的意思是安全性/稳定性问题就是这个.在我的示例中,NSLog的格式字符串是常量:@“%d”,并且您知道在编译它时NSLog将期望传递单个整数.当您像NSLog([obj makeSomeString])一样调用NSLog时,您在编译时并不真正知道格式字符串是什么,或者应该遵循多少/哪种类型的参数.如果在运行时字符串变成“%d%d%@”,它将很乐意从堆栈中读取两个整数和一个NSObject,而不管是否有任何对象实际放在那里.这是它警告你的问题.

在您的情况下警告无效,因为您生成的字符串格式为%d,因此它不应包含会导致此问题显示的%字符.

总结

以上是内存溢出为你收集整理的cocoa – 我在NSLog上收到警告“Format not a string literal and no format arguments” – 如何在提供代码更正此问题?全部内容,希望文章能够帮你解决cocoa – 我在NSLog上收到警告“Format not a string literal and no format arguments” – 如何在提供的代码中更正此问题?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/1018308.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存