小编Ale*_* N.的帖子

目标C奇数十进制到长期转换

NSLog(@"%llu\n\n", ULONG_LONG_MAX);

NSDecimalNumber *decimal = [NSDecimalNumber decimalNumberWithString:@"154550038129946620"];
NSLog(@"%@", decimal);
NSLog(@"%llu\n\n", [decimal unsignedLongLongValue]);

decimal = [NSDecimalNumber decimalNumberWithString:@"154550038129946628"];
NSLog(@"%@", decimal);
NSLog(@"%llu", [decimal unsignedLongLongValue]);
Run Code Online (Sandbox Code Playgroud)

两个值都小于ULONG_LONG_MAX.但是,我们在输出中看到的是:

2012-01-05 17:41:55.879 test[1276:207] 18446744073709551615

2012-01-05 17:41:55.969 test[1276:207] 154550038129946620
2012-01-05 17:41:56.095 test[1276:207] 154550038129946624

2012-01-05 17:41:56.096 test[1276:207] 154550038129946628
2012-01-05 17:41:56.096 test[1276:207] 154550038129946624
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我不知道如何解释这种行为.

decimal objective-c long-integer

6
推荐指数
1
解决办法
462
查看次数

在单个qoutes中以字符串文字形式的目标c enum值

发现枚举声明 AudioToolbox/AudioServices.h

enum
{
    kAudioSessionNoError                                =  0,
    kAudioSessionNotInitialized                         = '!ini',
    kAudioSessionAlreadyInitialized                     = 'init',
    kAudioSessionInitializationError                    = 'ini?',
    kAudioSessionUnsupportedPropertyError               = 'pty?',
    kAudioSessionBadPropertySizeError                   = '!siz',
    kAudioSessionNotActiveError                         = '!act',
    kAudioServicesNoHardwareError                       = 'nohw',
    kAudioSessionNoCategorySet                          = '?cat',
    kAudioSessionIncompatibleCategory                   = '!cat',
    kAudioSessionUnspecifiedError                       = 'what'
};
Run Code Online (Sandbox Code Playgroud)

我真的不明白这个声明究竟是什么.Google不提供任何信息.有什么帮助吗?

iphone enums objective-c

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

Objective C块声明冲突

关于目标c块,我遇到了一些非常烦人的问题.比方说,我们有这样的代码:

//Class1.h
#import <Foundation/Foundation.h>

typedef void (^Class1Callback)(BOOL bl);

@interface Class1 : NSObject { }

- (id)initWithCallback:(Class1Callback)callback;

@end

//Class2.h
#import <Foundation/Foundation.h>

typedef enum Class2Enum { Foo, Bar, FooBar } Class2Enum;

typedef void (^Class2Callback)(Class2Enum ce);

@interface Class2 : NSObject { }

- (id)initWithCallback:(Class2Callback)callback;

@end

//main.c
#import "Class1.h"
#import "Class2.h"

int main(int argc, char *argv[]) {
    Class1 *class1 = [[Class1 alloc] initWithCallback:^(BOOL bl){ }];
    Class2 *class2 = [[Class2 alloc] initWithCallback:^(Class2Enum ce){ }];
}
Run Code Online (Sandbox Code Playgroud)

在这段代码中我得到一个错误"不兼容的块指针类型初始化'void(^)(枚举Class2Enum)',期望'Class1Callback'"在行

Class2 *class2 = [[Class2 alloc] initWithCallback:^(Class2Enum ce){ }];
Run Code Online (Sandbox Code Playgroud)

但是当我在main.c中反向导入时,即 …

iphone typedef objective-c objective-c-blocks

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