- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想将 NSValue 转换为 NSNumber。这段代码有什么问题?
char value[4];
[myNSValue getValue:(void*)value];
NSNumber *number = [[NSNumber alloc] initWithBytes:(void*)value objCType:[myNSValue objCType]];
NSTimeInterval duration = [number intValue];
它导致最后一行崩溃。这里会发生什么?
最佳答案
正如@ale0xB 在上面的评论中所诊断的那样,NSNumber
doesn't actually provide its own implementation的 -initWithBytes:objCType:
方法;所以,当你调用那个选择器时,你实际上得到了来自 NSNumber
的实现。的基类 NSValue
. [[NSNumber alloc] initWithBytes:foo objCType:bar]
之间没有1 区别和 [[NSValue alloc] initWithBytes:foo objCType:bar]
— 他们都调用相同的方法实现,释放 self
它被给出并返回一个新对象,该对象通常是 NSConcreteValue
类型(NSValue
的未记录子类,但不是 NSNumber
的子类)。
更清楚一点:
#import <assert.h>
#import <Foundation/Foundation.h>
int main()
{
id x;
x = [NSNumber numberWithInt:42];
assert( [x isKindOfClass:[NSNumber class]] );
assert( [x respondsToSelector:@selector(intValue)] );
int fortytwo = 42;
x = [[NSNumber alloc] initWithBytes:&fortytwo objCType:@encode(int)];
assert( [x isKindOfClass:[NSValue class]] );
assert( ! [x isKindOfClass:[NSNumber class]] ); // yikes!
assert( ! [x respondsToSelector:@selector(intValue)] ); // your particular problem
}
但是,类别可以拯救! Martin Häcker 写了一个类别 NSNumber(CreatingFromArbitraryTypes)
它可以适应做你想做的事。查看公共(public)域源代码 here .2 基本思想是对每种可能的类型编码进行特殊处理:
"i"
, 然后发送到 -numberWithInt:
;"f"
, 然后发送到 -numberWithFloat:
;等等。这很乏味;但是一旦你编写了一次代码,你就可以从那时起使用类别并简单地调用 [NSNumber numberWithValue:myNSValue]
.
(1 – 或多或少。我会说,在这种情况下没有什么区别。)
(2 – 该代码有几个错误,尤其是在以后的修订版中。参见 my patch here。)
关于iphone - NSValue 到 NSNumber 转换崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12585542/
如何创建包含 CGAffineTransform 的 NSValue 实例? UIKit 提供了[NSValue valueWithCGAffineTransform:],但 AppKit 没有。 我
所以我在这里读到,我可以使用将 CGLayerRef 编码为 NSValue NSValue *myCopy = [[NSValue alloc] initWithBytes:&myLayer obj
如何将非对象 Objective-C 不透明数据类型(如 CGImageRef、CGPDFPageRef)不透明类型转换为 NSValue 对象? 最佳答案 Check out this refere
我正在尝试创建一个跨平台的 NSValue 类别,它将处理 Cocoa 和 iOS 的 CGPoint/NSPoint 和 CGSize/NSSize 等。 我有这个: #ifdef __MAC_OS
我正在尝试将多维结构数组编码到 NSValue 中。 这是结构: typedef struct { float Position[3]; float Color[4]; } Verte
我在 XCode 中收到警告说 NSValue 可能不会响应 +valueWithCMTime:' 但我不确定我做错了什么。在我的头文件中,我有这个: #import #import ... -(
在我需要将所有数据成员保存在 NSDictionary 中的情况下,放置结构(自定义类型,甚至是标量,即 CGPoint)是否更有意义在我自己的包装器中(不是 NSValue),这样我就可以避免每次获
如何将下面的动画翻译成Swift3? CABasicAnimation *scaleAnimation = [CABasicAnimation animationWithKeyPath:@"trans
我有一个 MVC 应用程序。该模型有一个属性,它是一个结构 NSSize。它可以这样写: - (void)setSize:(NSSize)aSize; View 使用键值编码设置此 NSSize。但是
我通过 NSValue 对象和以下代码行将 Chipmunk Physics 的 cpShape 对象存储在 NSMutableDictionary 中: NSValue *shapeValue =
我正在尝试使用 Facebook pop POPSpringAnimation 为 UIButton 的边界设置动画,但我找不到我应该在 swift 中使用什么来替换 NSValue.valueWit
我有一个 plist(在 XCode 中创建),其中包含一个充满“数字”(0.01、1、2、6)的数组,当使用 initWithContentsOfFile 重新构建时,该数组将解包到 NSValue
有什么方法可以使用 NSKeyedArchiver 来编码包含自定义结构的 NSValue 吗?我有一个 NSDictionary,其中包含封装在 NSValues 中的结构,我想将其存档为更大的对象
一些背景... 我正在编写通过 ObjC-JS 桥使用 UIWebView 与 javascript 交互的代码的stringByEvaluatingJavaScriptFromString: .这个
我正在尝试更改我的 UISegmentedControl 的文本阴影位置.为此,documentation说我需要通过 NSValue它包装了一个 UIOffset 结构。 UITextAttribu
我有一些代码,我将在其中接收未知类型的对象。它可以是 NSString、NSNumber、包裹在 NSValue 或其他类中的标量: -(void) doSomethingWith:(id) valu
如何将NSValue转换为CLLocationCoordinate2D? 我在 (NSArray *)coordinateArray 中收到 NSValue,并且需要为数组中的每个 NSValue 获
我需要将结构 AudioStreamBasicDescription 传递给随机 View Controller 。为此,我创建了一个单例类,我想将 AudioStreamBasicDescripti
我想将 NSValue 转换为 NSNumber。这段代码有什么问题? char value[4]; [myNSValue getValue:(void*)value]; NSNumber *numb
我只是想将 CLLocationCoordinates 转换为 NSValue 以用于稍后在我的应用程序中带回的数组。这是我的代码: NSUInteger count = [self.locati
我是一名优秀的程序员,十分优秀!