ARC禁止将非目标C指针类型'const UInt8 *'(aka'const unsigned char *')强制转换为'NSData *'

耶里图耶

好的,我对Obj-C和iOS完全陌生。我只是在尝试iOS上的Pebble手表的DataLogging示例,并更改一些内容来记录加速度计读数。

我有这个功能:

- (BOOL)dataLoggingService:(PBDataLoggingService *)service hasByteArrays:(const UInt8 *const)data numberOfItems:(UInt16)numberOfItems forDataLoggingSession:(PBDataLoggingSessionMetadata *)sessionMetadata{

    //NSString *log = [NSString stringWithFormat:@"%s", data]; <-- this line compiles but display garbage on the view. So I try to use the line below.

    NSString *log = [[NSString alloc] initWithData:(NSData *)data encoding:NSASCIIStringEncoding]; <-- this line gave build error as in the post title

    [self addLogLine:log];

    // We consumed the data, let the data logging service know:
    return YES;
}

因此,任何帮助将不胜感激。谢谢。

CRD

首先是您的错误:它告诉您不能使用指向非Objective-C对象的指针-您有一个指针UInt8-只需将其转换为指向Objective-C对象的指针-NSData在您的情况下为ARC( (Objective-C内存收集器)不知道如何处理结果。如果可能的话,可以通过桥接强制转换来告诉ARC如何处理它。然而,在你的情况下,它不可能的,因为你不能只投了UInt8 *一个NSData *-两指完全不同的事情。

猜测您的方法被传递了一个指向字节序列的指针(hasByteArrays:)和该序列中的字节数(numberOfItems),如果正确,则您所追求的方法是initWithBytes:length:encoding:,该方法直接采用一个指向字节序列的指针。例如:

NSString *log = [[NSString alloc] initWithBytes:data
                                         length:numberOfItems
                                       encoding:NSASCIIStringEncoding];

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

错误:从 'void*' 到 'const uint8_t* {aka const unsigned char*}' [-fpermissive] 的无效转换

如何将 const char* 转换为 const unsigned char*

将char *转换为const unsigned char *是否安全?

将“ wstring”转换为“ const UInt8 *”

如何将const void *转换为unsigned char *?

在C ++(WinRT)中从IBuffer转换为const unsigned char

无法将'const char *'转换为'LPCWSTR {aka const wchar_t *}'

无效的转换const unsigned char

如何正确将char ** x强制转换为const char **

从'const char *'到'unsigned char *'的无效转换

预期 'const GLchar * const*' {aka 'const char * const*'} 但参数的类型是 'char **'

将Vcl :: Controls :: TCaption aka(System :: UnicodeString)转换为const char *

如何将const unsigned char数组中的元素转换为char

错误:请求从“const char”转换为非标量类型“std::string”{aka 'std::__cxx11::basic_string<char>'}

将const Char *转换为Char数组

将 const char * 转换为小写 char *

在C ++中将char *转换为const char *

将const char **转换为std :: vector <const char *>

错误:无法将“ const char **”转换为“ const char(*)[64]”

无法将“std::__cxx11::string {aka std::__cxx11::basic_string<char>}”转换为“LPCSTR {aka const char*}”

将String8转换为const char *

无法从const char *转换为const char *&

将const std :: vector <char>强制转换为未签名的char *?

将const char *转换为const wchar_t *

将(const)char *转换为LPCWSTR

将表格CString转换为const char *

将const char **转换为void *?

将 QString 转换为 const char*

将const char *转换为QString