从NSNumber添加intValue会以任何方式改变NSString吗?

时间:2011-01-01 18:05:23

标签: iphone objective-c concatenation

我正在动态构建一个url,需要一种方法将NSNumber的intValue添加到它的末尾。

NSNumber *hatId = [NSNumber NumberWithInt:25]
NSMutableString* theUrlString = [[NSMutableString alloc] init];
[theUrlString appendFormat:@"http://www.website.com/SelectHat/%d", [hatid intValue]];
NSURL *url = [NSURL URLWithString:theUrlString];

完成上述操作后,一个简单的单元测试或NSLog将显示结果看起来有效

http://www.website.com/SelectHat/25

但是我的问题是这个 - 以这种方式连接是否会改变NSString所以它不会像我期望的那样成为有效的字符串?这也是构建需要来自NSNumber的intValue的字符串的“好”方法吗?

更新

我只是想确保%d内联没有问题,NSString就像我预期的那样。我遇到的问题有点复杂,所以我会将其保存为另一个问题。感谢关于NSURL / NSNumber / int的回复,因为我还在学习很多关于objective-c的文章

4 个答案:

答案 0 :(得分:7)

NSNumber *hatId = [NSNumber NumberWithInt:25]
NSMutableString* theUrlString = [[NSMutableString alloc] init];
[theUrlString appendFormat:@"http://www.website.com/SelectHat/%d", [hatid intValue]];
NSURL *url = [NSURL URLWithString:theUrlString];

上述内容很容易简化为一行代码:

NSURL *url = [NSURL URLWithString: [NSString stringWithFormat: @"http://www.website.com/SelectHat/%d", 25]];
  • 除非您真的需要一个

  • ,否则无需创建NSNumber
  • 无需单独分配/初始化字符串

  • 根本不需要使用可变字符串

而且,不,修改可变字符串不会使字符串无效。

答案 1 :(得分:1)

此行错误

NSNumber* hatid = 25;

NSNumber是一个对象。你不能像那样初始化它。试试这个:

NSNumber *hatId = [NSNumber NumberWithInt:25]

至于你的问题 - NSString是一个NSString,只要你正确创建它。但是,有没有理由将该号码保存为NSNumber而不是字符串?

答案 2 :(得分:1)

为什么你认为这会产生“无效”字符串?使用appendFormat方法只需根据需要扩展可变字符串。

关于它是否是构建字符串的好方法 - 如果您预先拥有所有信息,则可以通过initWithFormat方法创建一个新的(不可变的)字符串。也就是说,你正在做的事情没有错。 (也就是说,没有必要使用NSNumber - 标准的int会这样做。你也没有正确初始化NSNumber,正如@Abizern在他的回答中所说明的那样。)

答案 3 :(得分:1)

我很好奇为什么你认为将内容附加到可变字符串会使该字符串无效。如果您遇到问题,请分享实际出现的问题。

[theUrlString appendFormat:@"http://www.website.com/SelectHat/%d", [hatid intValue]];

是有效且修改NSMutableString的好方法。

由于您正在构建URL,因此您可能希望直接使用NSURL。查看+ URLWithString:realtiveToURL:和-URLByAppendingPathComponent:作为构建NSURL的方法。这些方法很方便,因为当你想要“SelectHat / 25”时,它们会阻止你意外地创建一个以“SelectHat25”或“SelectHat // 25”结尾的字符串。

现在不包括字符串和URL

NSNumber* hatid = 25;

无效。这是创建一个指向NSNumber对象的指针并将其赋值给int值。你将在内存地址'25'寻找一个NSNumber对象,谁知道你会在那里找到什么。您应该构建一个NSNumber实例,或者只使用一个int类型。

NSNumber* hatid = [[NSNumber alloc] initWithUnsignedInteger:25];

NSUInteger hatid = 25