我正在动态构建一个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的文章
答案 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]];
除非您真的需要一个
无需单独分配/初始化字符串
根本不需要使用可变字符串
而且,不,修改可变字符串不会使字符串无效。
答案 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