0

我对如何在 Objective C 中处理整数感到困惑。

如果我定义以下内容:

NSInteger i = 6;
NSLog(@"%d", i);

我希望它将 6 打印到控制台。

但是我在一个对象中有一个 NSInteger ,它显然是由指针引用的,所以我得到了非常不同的结果。

例如:

@interface Section : NSObject {
NSInteger Id;
}

@property (nonatomic, assign) NSInteger Id;

请假设这已在实现中综合。

我创建对象设置它的值并再次访问它,如下所示:

Section *section = [[Section alloc] init];
section.Id = 6;

NSMutableArray *sections = [[NSMutableArray alloc] init];
[sections addobject:section];

Section *sectionB = [setions objectAtIndex:0];
NSLog(@"%d",  sectionB.Id);

这有打印内存地址的奇怪效果,即像 5447889 这样的数字。为什么我不能只得到值?

我试过使用:

NSInteger sid = [[section Id]integerValue];

但随后我收到警告Invalid receiver type 'NSInteger'并且有时会收到错误程序接收信号:“EXC_BAD_ACCESS”。

我真的很想知道如何正确处理整数或任何值。

非常感谢

4

3 回答 3

0

看起来您正在访问未初始化的内存;5447889 看起来不像一个指针值——指针通常是字对齐的,而 5447889 不是字对齐的。

也许您可以剪切并粘贴您的实际代码。这有拼写错误,例如addobject代替addObjectsetions代替sections

如果您保持简单并NSLog(@"%d", section.Id)跳过弄乱数组,它会起作用吗?

于 2010-10-13T09:48:20.620 回答
0

关于奇怪的价值观,请参阅 Dominic Cooney 的回答。

关于 EXC_BAD_ACCESS:[[section Id]integerValue];不起作用,因为它随后尝试将 NSInteger 解释为对象并尝试将消息发送integerValue给它,但这是行不通的。它是一个整数,而不是一个对象。

于 2010-10-13T09:49:58.160 回答
0

认为我找到了自己问题的答案。将 NSInteger 的值设置为 6 就可以了。我遇到的问题是我使用以下方法将其设置为从 Json 字符串返回的值:

NSInteger i = [jsonResult objectForKey:@"Id"];

应该是:

NSInteger i = [[jsonResult objectForKey:@"Id"] integerValue];

我没有对此进行测试,但根据 DarkDust 所说的关于 integerValue 采用对象而不是 Integer 的说法是有意义的。

感谢您的输入。

于 2010-10-13T10:29:12.233 回答