我正在努力做一些应该很容易的事情.我的NSNumber值为32025.89秒.我需要以小时,分钟,秒表示.有没有一种吐出来的方法?我似乎找不到合适的格式化程序.
我收到了客户的崩溃日志,以了解我的应用程序崩溃iPhone的原因.
这里来自崩溃日志的一些信息:
Exception Type: EXC_CRASH (SIGABRT) Exception Codes: 0x00000000, 0x00000000 Crashed Thread: 0
线程0的堆栈跟踪
Thread 0 Crashed: 0 libSystem.B.dylib 0x3293f98c 0x328c1000 + 518540 1 libSystem.B.dylib 0x3293f97c 0x328c1000 + 518524 2 libSystem.B.dylib 0x3293f96e 0x328c1000 + 518510 3 libSystem.B.dylib 0x3295461a 0x328c1000 + 603674 4 libstdc++.6.dylib 0x30a143b0 0x309cf000 + 283568 5 libobjc.A.dylib 0x3347a858 0x33475000 + 22616 6 libstdc++.6.dylib 0x30a12776 0x309cf000 + 276342 7 libstdc++.6.dylib 0x30a127ca 0x309cf000 + 276426 8 libstdc++.6.dylib 0x30a12896 0x309cf000 + 276630 9 libobjc.A.dylib 0x33479714 0x33475000 + 18196 10 CoreFoundation 0x335c8210 …
刚刚发生了一件奇怪的事.
我在NSUserDefaults中存储了一个带有unsigned long long值的NSNumber.当我检索它时,值只是改变了.似乎系统认为数字很长而不是无符号长.
更糟糕的是,当我将从UserDefaults检索到的数字与原始数字进行比较时,结果是NotEqual!
代码有什么问题?谢谢!
static NSString * const NumberKey = @"MyNumber";
unsigned long long value = 15908045869032883218ULL;
if ([[NSUserDefaults standardUserDefaults] objectForKey:NumberKey] == nil) {
NSNumber *number = [NSNumber numberWithUnsignedLongLong:value];
[[NSUserDefaults standardUserDefaults] setObject:number forKey:NumberKey];
NSLog(@"Original Number:%@", number); // 15908045869032883218, right
}
NSNumber *number = [[NSUserDefaults standardUserDefaults] objectForKey:NumberKey];
NSLog(@"Current Number:%@", number); // -2538698204676668398, weird
NSLog(@"Current Value:%llu", [number unsignedLongLongValue]); // 15908045869032883218, right
NSLog(@"%d", [number isEqualToNumber:[NSNumber numberWithUnsignedLongLong:value]]); // 0
NSLog(@"%d", [number unsignedLongLongValue] == value); // 1
Run Code Online (Sandbox Code Playgroud)
我想有一个简单的NSSet,它加载了一些NSNumbers,然后找出这些数字是否已经添加到集合中.当我这样做:
NSMutableSet *set = [[NSMutableSet alloc] init];
NSNumber *num1 = [NSNumber numberWithInt:5];
NSNumber *num2 = [NSNumber numberWithInt:5];
[set addObject:num1];
if([set member:num2]){
// something...
}
Run Code Online (Sandbox Code Playgroud)
问题是成员总是返回nil(如果为false),即使这些数字相同.isEqual方法返回true.所以
if([num1 isEqual:num2]){
// correct
}
Run Code Online (Sandbox Code Playgroud)
工作...
在文档中我读到成员方法使用isEqual所以我不知道问题是什么...感谢任何建议.
[[self.view.window subviews] makeObjectsPerformSelector:@selector(setUserInteractionEnabled:) withObject:[NSNumber numberWithBool:NO]];
Run Code Online (Sandbox Code Playgroud)
我在另一个问题的答案中看到了这段代码(如何禁用除最顶层视图之外的所有视图的触摸输入?)并且当它工作时它让我感到惊讶,因为setUserInteractionEnabled:期望一个BOOL(因为它不是一个Objective-c对象不能以performSelector:withObject:类型方法传递).
哪个文档说通过NSNumber是好的?它适用于所有方法,还是需要特殊实现?它是否仅适用于BOOL,还是可以使用类似的类型int?
我有一个NSArray与NSNumber对象具有int值:
arrayOfValues = [[[NSArray alloc] initWithObjects: [NSNumber numberWithInt:1], [NSNumber numberWithInt:3], [NSNumber numberWithInt:5], [NSNumber numberWithInt:6], [NSNumber numberWithInt:7], nil] autorelease];
[arrayOfValues retain];
Run Code Online (Sandbox Code Playgroud)
我试图像这样迭代数组:
int currentValue;
for (int i = 0; i < [arrayOfValues count]; i++)
{
currentValue = [(NSNumber *)[arrayOfValues objectAtIndex:i] intValue];
NSLog(@"currentValue: %@", currentValue); // EXE_BAD_ACCESS
}
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?
由于NSNumberObjective-C中有新的文字,您可以使用,例如:
NSNumber *n1 = @1000; // [NSNumber numberWithInt:1000]
Run Code Online (Sandbox Code Playgroud)
但它似乎不可能与枚举一起使用?我试过了:
typedef enum {
MyEnumA = 0,
MyEnumB,
MyEnumC
} MyEnum;
NSNumber *n2 = @MyEnumA; // [NSNumber numberWithInt:MyEnumA]
Run Code Online (Sandbox Code Playgroud)
但我得到一个编译器错误说:
程序中意外的'@'
我不明白为什么它不起作用,因为枚举是一个int?有没有办法让这项工作?
我已将我的项目转换为swift 3,我遇到了NSNumber的问题,我无法处理.这是我的数字格式化声明
let numberFormatter: NumberFormatter = {
let nf = NumberFormatter()
nf.numberStyle = .decimal
nf.minimumFractionDigits = 0
nf.maximumFractionDigits = 1
return nf
}()
Run Code Online (Sandbox Code Playgroud)
这里有错误的地方.价值是双倍的,确保其他东西很好.
Label.text = numberFormatter.string(from: NSNumber(value))
Run Code Online (Sandbox Code Playgroud)
来自调试器的消息:
参数标签'(_ :)'与任何可用的重载都不匹配
在转换之前一切正常.请帮忙,我找不到
我正在尝试在我的本机应用程序中显示本地图像.文档说你这样做的方式是做类似的事情
<Image source={require('./my-icon.png')} />;
Run Code Online (Sandbox Code Playgroud)
这本身就可以工作,但是如果我从中获取数据的api有一个空的url对象,我试图将它作为条件逻辑传递.
<Image source={{uri: article.urlToImage || require("./awaiting.png")}}/>
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我得到'NSNumber类型的'1'的JSON值无法转换为有效的URL'.
它似乎不喜欢组合
<Image source={{uri: article.urlToImage }}/>
Run Code Online (Sandbox Code Playgroud)
和
<Image source={require('./awaiting.png')} />
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙吗?
谢谢
创建一个ARC新项目并在didFinishLaunchingWithOptions中注入此代码.
for (int i=0; i < 1000000; i++) {
NSNumber* num = [NSNumber numberWithInt:i];
NSLog(@"%@", num);
}
NSLog(@"over");
Run Code Online (Sandbox Code Playgroud)
应用程序的内存将增加.此外,在for循环结束时,内存不会减少.
但是,如果你替换相同的for循环:
NSNumber* num = [NSNumber numberWithInt:i];
Run Code Online (Sandbox Code Playgroud)
通过
NSNumber* num = [[NSNumber alloc] initWithInt:i];
Run Code Online (Sandbox Code Playgroud)
然后记忆将保持稳定.
这是预期的行为吗?
编辑:
好吧,让我们暂时把didFinishLaunchingWithOptions放在一边.您仍然可以放入viewDidLoad并删除零以便更快地到达for循环结束应用程序的内存将增长到~11 MB.当for循环结束时,内存不会减少.它仍然是~11 MB.
- (void)viewDidLoad {
[super viewDidLoad];
for (int i=0; i < 100000; i++) {
NSNumber* num = [NSNumber numberWithInt:i];
NSLog(@"%@", num);
}
NSLog(@"over");
}
Run Code Online (Sandbox Code Playgroud)
如果你去:
- (void)viewDidLoad {
[super viewDidLoad];
@autoreleasepool {
for (int i=0; i < 100000; i++) {
NSNumber* num = …Run Code Online (Sandbox Code Playgroud)