标签: nsnumber

NSMutableArray只将Object添加为指针?

我有这个小代码

 NSMutableArray *myArray = [[NSMutableArray alloc] init]; 
 NSNumber *myNumber = [NSNumber numberWithDouble:752.65];

 [myArray addObject:myNumber];
Run Code Online (Sandbox Code Playgroud)

使用此代码,我将对象存储在数组中.但是现在我有两个彼此独立的对象.

如果我在将myNumber添加到数组后更改它,则数组内的值不会更改.我该如何存档?我试图只给出一个指向数组的指针,但它没有用.

cocoa objective-c nsnumber nsmutablearray

5
推荐指数
2
解决办法
3万
查看次数

如何在不使用numberfromstring的情况下将NSString转换为NSNumber

我想在不使用numbreFromString:方法的情况下将NSString转换为NSNumber?numbreFromString:metgod在4.0中表现得很奇怪.所以我想使用替代方法将NSString转换为NSNumber.请帮我....

+ (NSString *)formatText:(NSString *) text withLocalSettings:(BOOL) isLacale {  

    NSNumber *aNsNumber= [numberFormatter numberFromString: text];  
    NSString *returnString = [NSString stringWithString:[numberFormatter stringForObjectValue:aNsNumber]];

    if(isLacale) {
        return returnString;
    }
    else {
        return [NSString stringWithFormat:@"%lf",[aNsNumber doubleValue]];
    }
} 
Run Code Online (Sandbox Code Playgroud)

0

我正在开发一个应用程序,我需要在3.0和4.0中运行我的应用程序.我有一个文本字段,当我尝试在文本字段中输入数字时,行为就像这样...在3.0中: - 它允许输入7位数和2个小数值(我已经格式化了这样).我根据所选国家/地区对数字以及逗号分隔进行了格式化和本地化.它在3.0和3.1.2中完美运行

IN 4.0: - 它允许您只输入4个数字,输入第5个数字后,它将使文本字段为空.当您输入第5个数字时没有显示任何内容,当您输入第6个数字时,它从第1个数字开始并继续同样直到4个数字.例如: - 当你输入1234时,显示文本字段 - 1234,当你输入12345时,文本字段显示为"".当你现在输入6时,它以6开始,依旧等等.

我正在使用NSNumberFormatter和numberfromstring方法格式化在文本字段中输入的值.

我无法理解为什么会这样发生......请帮助我......

nsnumber nsstring ios4

5
推荐指数
1
解决办法
2万
查看次数

参数isKindOfClass:[NSNumber class] - 理智的方式检查这个?

所以我玩的是arg的类类型在运行时未知的东西.像这样:

- (NSNumber *)doWhatever:(id)arg
{
    // this ALWAYS FAILS
    if ([arg isKindOfClass:[NSNumber class]]) {
        return arg;
    }
    else {
        // what was it???
        NSLog("arg klass=%@", [arg class]);  // prints NSCFNumber
    }

    // This check works correctly.
    if ([arg isKindOfClass:[NSArray class]]) {
        for (id x in arg) {
            NSNumber *result = [self doWhatever:x];
            if (result) {
                return result;
            }
        }
    }
    return nil;
}

- (void)someMethod
{
    NSArray *myArray = [NSArray arrayFromObjects:[NSNumber numberWithInt:3], nil]];
    NSNumber *myNum = [self doWhatever:myArray];
    NSLog(@"myNum=%@", myNum); …
Run Code Online (Sandbox Code Playgroud)

types objective-c objective-c-runtime dynamic-typing nsnumber

5
推荐指数
1
解决办法
3926
查看次数

使用NSNumberFormatter将NSNumber格式化为百分比(%),并带有一个小数位

我试图将包含值0.305的NSNumber格式化为"30.5%".

但是,我的以下代码不起作用:

[numberFormatter setNumberStyle:NSNumberFormatterPercentStyle];
[numberFormatter setLocale:[NSLocale currentLocale]];
Run Code Online (Sandbox Code Playgroud)

如何指定该数字应格式化为具有一个小数位的百分比?

objective-c nsnumber ios

5
推荐指数
2
解决办法
4236
查看次数

检查NSNumber是否为分数

检查a NSNumber是否为分数的最佳方法是什么?

NumberIsFraction(@(0)); // NO;
NumberIsFraction(@(0.5)); // YES;
NumberIsFraction(@(1.0)); // NO;
Run Code Online (Sandbox Code Playgroud)

边境案件处理和绩效方面的"最佳".

macos objective-c nsnumber ios

5
推荐指数
2
解决办法
2318
查看次数

如何确定TextField是否包含数字字符串?

我从a得到一个值TextField,我需要检查它中是否有数字.无论是浮点数还是整数都不重要,但绝对是"数字"

我怎么能抓住这个?

这就是我到目前为止所做的事情 - 即使obj是123(实际上是一个数字),条件是假的,所以我无法进入if.我已经尝试过NSValueData,但具有相同的结果.

id obj = self.textArea.text;

if ([obj isKindOfClass:[NSNumber class]]) {
    self.weight = [NSNumber numberWithFloat:([self.textArea.text floatValue])];
Run Code Online (Sandbox Code Playgroud)

introspection nsnumber ios

5
推荐指数
1
解决办法
3028
查看次数

NSNumber 会自动转换字符串吗?

创建 时SKStoreProductViewController,我传递一个带有商店标识符参数的字典。:

@{ SKStoreProductParameterITunesItemIdentifier : @010101010 };
Run Code Online (Sandbox Code Playgroud)

该值应该是NSNumber(如上所示):

与此键关联的值是 NSNumber 的实例,代表您希望商店在呈现视图控制器时显示的项目的 iTunes 标识符。

但当我将值作为字符串传递时,它可以毫无怨言地工作:

@{ SKStoreProductParameterITunesItemIdentifier : @"010101010" };
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?是否NSNumber根据给定的字符串自动创建正确的数字类型?这是发生在StoreKit 中NSNumber还是 StoreKit 正在这样做?

cocoa-touch objective-c nsnumber storekit ios

5
推荐指数
1
解决办法
300
查看次数

NSNumber可能的内存泄漏

创建一个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)

xcode memory-leaks nsnumber

5
推荐指数
1
解决办法
218
查看次数

iOS 8号码转换/格式化错误?(不能重现)

以下方法从UITextField获取输入并将其格式化以供显示.这段代码多年来一直运行良好,但是使用iOS 8.1在iPhone 6 Plus上报告了一个问题.它每次都发生在用户身上,但我无法重现它.我相信它与iOS 8上的NSNumber/NSDecimalNumber转换和格式有关,可能对于64位应用程序/设备.

用于输入的键盘是数字键盘,因此可输入文本字段的唯一文本是数字0-9和"删除".

根据用户的说法,这就是发生的事情:

我想输入250美元的预算金额.当我把它拉起来时,最初是显示0.00.然后,一旦我输入2,它然后显示220.02然后当我输入5它说2,200.25然后当我输入0时它会出现22,002.50如果我试图删除任何数字它出现了一个非常大的数字.

根据我的测试,下面的代码在iOS 8.1中与模拟器中的每个设备(包括iPhone 6 Plus)完美配合.它也适用于iOS 8.1的iPhone 5S设备(64位).我没有iPhone 6 Plus设备.

我错过了某人看到可能导致此错误的内容吗?

编辑:这可能是因为decimalNumberWithMantissa参数应该是unsigned long long我使用NSInteger?这会导致问题,如果是这样,为什么它会在iPhone 6 Plus上的iOS 8.1之前有效?如果可以的话,我会亲自检查一下......

entryField UITextField初始化如下:

entryField.text = [NSString stringWithFormat:@"%@", [[[ObjectsHelper sharedManager] currencyFullFormatter] stringFromNumber:[NSDecimalNumber zero]]];
Run Code Online (Sandbox Code Playgroud)

这是相关代码的其余部分:

#define MAX__NUMBER_LENGTH 10

- (BOOL)textField:(UITextField *)textFieldHere shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

    __ENTERING_METHOD__
    NSMutableString *mstring = [[NSMutableString alloc] initWithString:[entryField text]];

    if([string length] > 0){
        //add case
        [mstring insertString:string atIndex:range.location];
    }
    else {
        //delete case - the length of replacement string is zero for a delete
        [mstring deleteCharactersInRange:range]; …
Run Code Online (Sandbox Code Playgroud)

64-bit nsnumber nsdecimalnumber ios8 iphone-6-plus

5
推荐指数
1
解决办法
390
查看次数

CGFloat和NSNumber之间的转换没有不必要的升级到Double

众所周知,CGFloat(在CoreGraphics,UIKit等中无处不在)可以是32位或64位浮点数,具体取决于处理器架构.

在C中,CGFloat它是一个typealias到floatdouble,在Swift则它被定义为struct CGFloat具有native属性(其是FloatDouble).

已经多次观察到NSNumber可以从被创建并转换为FloatDouble,但有从与存在不相似的转换CGFloat.一般建议(例如在Swift中将CGFloat转换为NSNumber)是通过转换Double

CGFloat <--> Double <--> NSNumber
Run Code Online (Sandbox Code Playgroud)

例:

let c1 = CGFloat(12.3)
let num = NSNumber(double: Double(c1))
let c2 = CGFloat(num.doubleValue)
Run Code Online (Sandbox Code Playgroud)

这很简单,也没有精确度.此外,大多数平台现在都是64位,然后CGFloat/Double 转换很简单,可能由编译器优化.

然而,这引起了我的好奇心,如果转换可以做到 无需促进CGFloatDouble32位平台.

可以使用构建配置语句(例如,应该使用条件编译来处理不同体系结构中CGFloat的差异吗?):

extension NSNumber {
    convenience init(cgFloatValue value : CGFloat) {
        #if arch(x86_64) || arch(arm64) …
Run Code Online (Sandbox Code Playgroud)

nsnumber cgfloat swift

5
推荐指数
1
解决办法
4501
查看次数