0

好的,我对 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;
}

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

4

2 回答 2

2

首先是您的错误:它告诉您不能将指针指向不是Objective-C对象的东西-您有一个指向的指针UInt8-只需将其转换为指向Objective-C对象的指针-NSData在您的情况下为ARC( Objective-C 内存收集器)不知道如何处理结果。如果可能的话,你可以通过一个告诉 ARC 如何处理它的桥接来解决这个问题。但是,在您的情况下,这是不可能的,因为您不能只将 anUInt8 *转换为 an NSData *- 两者指的是完全不同的事物。

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

NSString *log = [[NSString alloc] initWithBytes:data
                                         length:numberOfItems
                                       encoding:NSASCIIStringEncoding];
于 2014-03-14T05:37:45.763 回答
0

尝试以下方法:

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

     NSString *log = [NSString stringWithCString:(const char *)data encoding:NSUTF8StringEncoding];

    [self addLogLine:log];

    // We consumed the data, let the data logging service know:
    return YES;
}
于 2014-03-14T05:14:29.837 回答