NSDecimalNumber是NSNumber的子类,据我所知,它实现了NSNumber实例所期望的所有NSNumber方法.
鉴于此,是否可以将NSDecimalNumbers提供给任何期望NSNumber的代码?
唯一可能的问题可能是检查参数是NSNumber实例的代码,但由于NSNumber是一个类集群,这样的代码必须检查实例是NSNumber 的子类,NSDecimalNumber实例应该通过它试验.
我有一个号码存储在一个NSNumber我想放入的号码中long double,如下所示:
NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
[f setMinimumSignificantDigits:5];
NSNumber * myNumber = [f numberFromString:@"1.1234567899"];
long double lnumber = mynumber;
NSLog(@"%Lf ",lnumber);
Run Code Online (Sandbox Code Playgroud) 我对Objective-C很新.我已经阅读了类似的问题,但我无法弄清楚如何用这些信息解决我的问题.
基本上,我这样做:
NSMutableArray* array1 = [[NSMutableArray alloc] initWithCapacity: 1];
NSNumber *n1 = [NSNumber numberWithInt: 12];
[array1 addObject: n1];
NSMutableArray* array2 = [[NSMutableArray alloc] initWithCapacity: 1];
NSNumber *n2 = [NSNumber numberWithInt: 13];
[array2 addObject: n2];
Run Code Online (Sandbox Code Playgroud)
将NSNumber 12添加到数组中可以很好地完成,但是添加13(或更高的值)不会; 程序在运行时崩溃(没有错误消息,并且生成的stackdump文件完全空白).如果重要的话,我正在Cygwin中使用gcc进行编译.我知道这可能与保留计数有关,就像我上面提到的问题一样,但我不知道如何修复它.即使我注释掉最后一行,它也会崩溃......所以它会在numberWithInt调用时崩溃,这意味着如果我为n2添加一个retain语句,它就没有机会被调用了.
编辑:因为我被要求提供更多代码,这里是我为了测试这个问题而制作的文件:
#import <stdio.h>
#import <Foundation/NSArray.h>
#import <Foundation/NSValue.h>
int main( int argc, const char *argv[] )
{
printf("1.\n");
NSMutableArray* array1 = [[NSMutableArray alloc] initWithCapacity: 1];
NSNumber *n1 = [NSNumber numberWithInt: 12];
[array1 addObject: n1];
NSMutableArray* array2 = [[NSMutableArray alloc] initWithCapacity: 1];
NSNumber …Run Code Online (Sandbox Code Playgroud) 这是我的代码
NSNumberFormatter *currencyStyle = [[NSNumberFormatter alloc] init];
[currencyStyle setFormatterBehavior:NSNumberFormatterBehavior10_4];
[currencyStyle setNumberStyle:NSNumberFormatterCurrencyStyle];
NSNumber *amount = [[NSNumber alloc] init];
NSLog(@"the price string is %@", price);
amount = [currencyStyle numberFromString:price];
NSLog(@"The converted number is %@",[currencyStyle numberFromString:price]);
NSLog(@"The NSNumber is %@", amount);
NSLog(@"The formatted version is %@", [currencyStyle stringFromNumber:amount]);
NSLog(@"--------------------");
self.priceLabel.text = [currencyStyle stringFromNumber:amount];
[amount release];
[currencyStyle release];
Run Code Online (Sandbox Code Playgroud)
这是日志吐出的内容
价格字符串是5转换后的数字是(null)NSNumber是(null)格式化的版本是(null)
我错过了什么吗?
编辑:更新的代码
NSNumberFormatter *currencyStyle = [[NSNumberFormatter alloc] init];
[currencyStyle setFormatterBehavior:NSNumberFormatterBehavior10_4];
[currencyStyle setNumberStyle:NSNumberFormatterCurrencyStyle];
NSNumber *amount = [currencyStyle numberFromString:price];
NSLog(@"the price string is %@", price);
NSLog(@"The …Run Code Online (Sandbox Code Playgroud) 我正在遍历API调用中的一组数字:
[6000,6001,2000]例如
这是我的代码:
for(NSNumber* arrayID in array){
NSManagedObject *ent = [NSEntityDescription insertNewObjectForEntityForName:@"Genre" inManagedObjectContext:self.managedObjectContext];
[ent setValue:arrayID forKey:@"genreID"];
[ent setValue:name forKey:@"genreName"];
[mySet addObject:ent];
}
Run Code Online (Sandbox Code Playgroud)
设置arrayID(我的核心数据中是NSNumber)时,我遇到了崩溃:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unacceptable type of value for attribute: property = "genreID"; desired type = NSNumber; given type = __NSCFString; value = 6002.'
Run Code Online (Sandbox Code Playgroud)
就好像arrayID没有被强制转换为NSNumber一样?Xcode中说,它的一个NSNumber当我键入它,但如果我把[的ArrayID的doubleValue]例如,Xcode的告诉我,身份证"的doubleValue不能为类型发送'’
有任何想法吗?
我正在使用以下内容获取输出:
2013-06-06 11:44:27.325 [2570:907] Rating: 0
2013-06-06 11:44:27.326 [2570:907] Rating: 2
2013-06-06 11:44:27.327 [2570:907] Rating: 3
[rateQuery findObjectsInBackgroundWithBlock:^(NSArray *rateObjects, NSError *error)
{
if( !error )
{
NSLog(@"rateobject %@", rateObjects);
for (id item in rateObjects) {
int ratingVal = [[item objectForKey:@"Rating"] intValue];
NSLog(@"Rating: %d", ratingVal);
}
}
}
];
Run Code Online (Sandbox Code Playgroud)
我想添加数字以获得总数然后除以计数以获得平均"评级".
我试过这个,但显然语法不正确.我想我需要使用NSArray而不是"item":
NSNumber *sum=[[item objectForKey:@"Rating"] valueForKeyPath:@"@sum.floatValue"];
NSLog(@"Rating Sum: %@", sum);
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助.
我想用NSNumber实现简单的计算.
例如:
int a;
a=a*10;
a=a+1;
NSLog(@"%d",a);
Run Code Online (Sandbox Code Playgroud)
如果我宣布如何做同样的事情
NSNumber *a;
Run Code Online (Sandbox Code Playgroud)
我想用NSNumber实现相同的逻辑,我使用整数实现.谢谢
我正在尝试数学来设置形状节点的位置.它看起来像这样(Swift):
var score: NSNumber?
score = score! + 1
xcode 6 beta 5运行完美,但xocde 6.1没有运行,报告'NSnumer'无法转换为'Int'
我提交了我的应用程序第2版以供审核,但由于对iCloud的高备份而被拒绝-当时我不知道这一点,因为我只需要在应用程序中拍照即可。现在我尝试转换该代码
NSError *error = nil;
NSURL *databaseUrl = [NSURL fileURLWithPath:databasePath];
BOOL success = [databaseUrl setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:&error];
if(!success){
NSLog(@"Error excluding %@ from backup %@", [databaseUrl lastPathComponent], error);
}
Run Code Online (Sandbox Code Playgroud)
很快我就无法工作...这就是我到目前为止...
func excludeFromBackup() {
var error:NSError?
var fileToExclude = NSURL.fileURLWithPath("path")
var success:Bool = fileToExclude?.setResourceValue(NSNumber.numberWithBool(true), forKey: NSURLIsExcludedFromBackupKey, error: &error)
if success {
println("worked")
} else {
println("didn't work")
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我的numberWithBool值失败。
谁能帮我?有人转换过吗?
提前致谢...
我想在我把笔记本电脑飞出窗外之前先在这里问一下。我对 iOS 开发非常陌生,并且一直在尝试使用 Core Data 尝试创建费用管理器应用程序。我有一个名为“Account”的实体,它有两个非可选属性(name 和 initBalance),如下所示:
我还创建了一个 NSManagedObject 子类,如下所示:
//Account.swift
class Account: NSManagedObject {
override func awakeFromInsert() {
super.awakeFromInsert()
initBalance = NSNumber(double: 0.0)
name = ""
}
}
//Account+CoreDataProperties.swift
extension Account {
@NSManaged var initBalance: NSNumber
@NSManaged var name: String
}
Run Code Online (Sandbox Code Playgroud)
Account 实体使用 NSFetchedResultsController 呈现在 AccountsViewController(符合 NSFetchedResultsControllerDelegate 协议的 UITableViewController 的子类)中。要添加一个新帐户,我使用 AccountsViewController 中的 segue 将我定向到 AccountInfoViewController(如下所示),它有两个 textField,一个用于名称,另一个用于帐户余额。当后者即将消失时,将在上下文中插入一个新帐户,其名称和余额来自文本字段。一旦父控制器出现 (AccountsViewController),它就会尝试保存更改并更新 tableView。
现在,如果我插入一个余额为整数的新帐户,则生活很好;上下文能够保存更改,tableView 通过显示新插入的帐户更新其行,我很高兴。当我尝试插入余额为十进制数的帐户时,应用程序在上下文尝试保存更改的位置崩溃。关于它为什么会发生,我根本没有得到任何有用的错误。这是用于管理文本字段的控制器的代码:
class AccountInfoViewController: UIViewController {
@IBOutlet weak var nameField: UITextField!
@IBOutlet weak var balanceField: UITextField!
var store: DataStore! // …Run Code Online (Sandbox Code Playgroud)