- (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” – 如何在提供的代码中更正此问题?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)