代码行:
@interface ViewController (){
IBOutlet UILabel *lbl_FirstName;
IBOutlet UILabel *lbl_LastName;
}
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
lbl_FirstName.text=@"XFirst";
lbl_LastName.text=@"XLast";
NSLog(@"First Name: %@",lbl_FirstName.text);
NSLog(@"Last Name: %@ %@",lbl_LastName.text);
}
结果:
First Name: XFirst
Last Name: (null) XLast
问题: *为什么第二次NSLog语句会像这样打印?
我知道(null)的原因,因为我没有为我的.xib中的lbl_Lastname提供任何引用。但我不知道打印后的原因(null)。
答案 0 :(得分:1)
看来内存中的下一个对象恰好是“XLast”的值。
我推测的是:
@"XLast"
lbl_LastName.text
,但由于lbl_LastName
为零,因此失败。lbl_LastName.text
是ni的事实,但由于你有两个%@
,它还打印出内存中的下一个对象。这恰好是您刚刚分配的字符串:@"XLast"
。这可能是未定义的行为,每次都可能不一样。
答案 1 :(得分:1)
来自documentation,它说:
在格式字符串中,'%'字符宣布一个值的占位符,后面的字符决定了预期值的类型以及如何格式化它。
所以,可能,它已经为你的字符串分配/宣布了两个占位符。并且,它找到第一个占位符的值。什么都没找到。因此,它显示(null)
并找到第二个占位符的值并相应地打印它。这应该是恕我直言..
答案 2 :(得分:0)
嘿为什么你要为这样的多个变量打印值添加超过%@。
NSLog(@"Last Name: %@",lbl_LastName.text);
如果您在控制台中获得空值,请检查您的插座连接
答案 3 :(得分:0)
说明符%@
Objective-C对象,打印为descriptionWithLocale返回的字符串:如果可用,或者说是其他描述。也适用于CFTypeRef对象,返回CFCopyDescription函数的结果。