Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 目标C中UILabel的随机数_Ios_Objective C_Type Conversion - Fatal编程技术网

Ios 目标C中UILabel的随机数

Ios 目标C中UILabel的随机数,ios,objective-c,type-conversion,Ios,Objective C,Type Conversion,我一直在到处寻找这个问题的答案,但我似乎不知道如何生成一个随机数并使它出现在我创建的UILabel中。我对编程非常陌生,如果这是一个愚蠢的问题,我很抱歉 在收到数百万个错误后,我确定我通常使用的函数self.titleLabel.text=@“WHATEVER”将不起作用,除非它设置为字符串。这是我将arc随机整数转换为字符串的努力,但我不断出错 NSInteger fish; fish = (arc4random()%100)+1; NSNumber *myNum = @(fish); NS

我一直在到处寻找这个问题的答案,但我似乎不知道如何生成一个随机数并使它出现在我创建的
UILabel
中。我对编程非常陌生,如果这是一个愚蠢的问题,我很抱歉

在收到数百万个错误后,我确定我通常使用的函数
self.titleLabel.text=@“WHATEVER”
将不起作用,除非它设置为字符串。这是我将arc随机整数转换为字符串的努力,但我不断出错

NSInteger fish;
fish = (arc4random()%100)+1;

NSNumber *myNum = @(fish);
NSString* myString = @(fish);

self.titleLabel.text = myString;
(这次我不再在viewcontroller.m页面上出现错误,但一旦构建成功,我会出现一个新错误,说明我的main.m有问题,我以前从未尝试过编辑它

这就是它看起来的样子:

#import <UIKit/UIKit.h>
#import "AppDelegate.h"

int main(int argc, char * argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}
#导入
#导入“AppDelegate.h”
int main(int argc,char*argv[]){
@自动释放池{
返回UIApplicationMain(argc、argv、nil、NSStringFromClass([AppDelegate类]);
}
}
错误是这样的:

线程1:信号SIGABRT

我的输出窗口简直疯了。

使用类似的方式:
NSString*myString=[nsstrirngstringwithformat:“%i”,fish];
self.titleLabel.text=myString;

没错。必须将标签文本设置为字符串

您需要
stringWithFormat
函数

这一行:

NSString*myString=@(fish)

毫无意义。它将fish转换为NSNumber,而不是字符串。该代码将生成有关不匹配类型的编译器警告,然后在您尝试引用myString时崩溃。(实际上,更仔细地看一下您的代码,fish已经是NSNumber,所以我不确定该代码的确切功能。无论如何,都没有什么好处。)

你想要的是这样的东西:

int fish = arc4random_uniform(100)+1;
self.titleLabel.text = [NSString stringWithFormat: @"%d", fish];
NSString类方法stringWithFormat将格式字符串和可变数量的参数作为输入,创建并返回字符串作为输出。“%d”格式字符串将替换为整数值

编辑:
正如rmaddy指出的,您应该使用
arc4random_uniform()
而不是带有模运算符的arc4random()。使用模运算符会导致“模偏差”其中一些数字比其他数字更常见。

最简单的更改就是将stringValue添加到myString行中。目前,您正在创建另一个NSNumber,如果在代码中设置断点并查看myString的值,您可以看到这一点

NSString* myString = @(fish).stringValue;

一个好的答案除了解释提供建议的修复外,还解释了OP的错误。还应该解释使用
arc4random\u uniform
arc4random
%
更好。天哪,非常感谢Duncan,它现在工作得很好!!!!我花了约3个小时试图解决这个问题,你解决了我的头痛问题在两行代码中!!@ns993别忘了接受解决问题的答案。仅供参考-查看以了解如何调试此类崩溃。调试崩溃是最重要的技能之一。创建一个NSNumber然后从中创建一个字符串似乎不必要地复杂。这也是一个刚刚被丢弃的额外对象创建。好的提示t-我没有注意到有两行代码在做几乎相同的事情。我仍然认为,当人们开始(以及之后很长一段时间)时,有更多行痛苦地清晰的代码是有用的,而不是试图在一行复杂的代码中完成每件事,但你上面的答案足够清楚:-)@Duncan C,对NSNumber使用文字并不总是意味着为NSObject分配了内存。阅读关于文字的叮当文档和关于标记指针的搜索信息。@AJNIX我敢打赌,如果您使用的是
NSNumber
方法
stringValue
,您已经在堆上分配了一个NSNumber对象。@AJNIX,我想了解一下LLVM编译器如何处理文字,但是我在叮当作响的地方找不到路。你能发布更具体的链接吗?