【问题标题】:Different int values or the same? EXC_BAD_ACCESS at NSLog不同的int值还是相同的? NSLog 中的 EXC_BAD_ACCESS
【发布时间】:2012-03-28 04:44:51
【问题描述】:

我有这个代码:

likeButton.tag = spik._id;
NSLog(@"spik ID=%@   likebtn.tag=%@",spik._id,likeButton.tag);
NSLog(@"%@", likeButton);

其中spik._idNSInteger

这是输出:

2012-03-11 19:35:37.751 KwikSpik[44277:ce03] spik ID=39975   likebtn.tag=39975   
2012-03-11 19:35:37.752 KwikSpik[44277:ce03] <<UIButton: 0xd178b60; frame = (20 12604; 30 30); opaque = NO; tag = 90793136; layer = <CALayer: 0xd1788d0>>

你在这里看到likeButton.tag = 39975,但是当我记录按钮时,它的标签是90793136

如果我写NSLog(@"spik ID=%@ likebtn.tag=%d",spik._id,likeButton.tag);

然后我得到

012-03-11 23:27:38.290 KwikSpik[45326:ce03] spik ID=39975 likebtn.tag=87582784

这些是对一个数字的不同表示还是不同的值?为什么这些值不同?

以后再写

NSLog(@"tag d %d",sender.tag);
NSLog(@"tag @ %@",sender.tag);

其中发件人是likeButton,然后第一个NSLog 输出87582784,第二个与EXC_BAD_ACCESS (code = 1, address = 0x30...) 崩溃

发生了什么事?为什么likeButton.tagspik._id 中有不同的值 - 或者它们只是看起来不同?

为什么NSLog第一次输出likeButton.tag%@,第二次就崩溃了?

【问题讨论】:

    标签: objective-c ios int exc-bad-access nsinteger


    【解决方案1】:
    NSLog(@"spik ID=%@ likebtn.tag=%d", spik._id, likeButton.tag);
    

    当您记录按钮时,标签不会被视为 int。

    【讨论】:

    • 是的,tag 不是对象;它是一个普通的 C 整数。 (NSIntegerintlong 的 typedef,具体取决于架构。)
    • 但是实际值是 39975(或像这样),而不是像 90793136。我不需要这么长的奇怪数字。
    • @Wevah spik._id 也是 NSInteger。但是为什么它们的日志不同呢?
    • 如果它是一个 NSInteger,那么你应该使用 %ld。
    • NSLog("button tag == %d", likeButton.tag);
    【解决方案2】:

    NSLog 对它们的解释与您使用的 %@ 不同。使用%d 以整数形式输出。

    NSLog(@"spik ID=%d   likebtn.tag=%d", spik._id,likeButton.tag);
    

    【讨论】:

    • 如果我以这种方式登录,输出值仍然不同。为什么?我把变量等同起来
    猜你喜欢
    • 2019-09-25
    • 2015-06-29
    • 2022-11-29
    • 2011-07-05
    • 1970-01-01
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    • 2016-03-06
    相关资源
    最近更新 更多