在CFDataRef中转换

时间:2010-06-11 11:46:28

标签: iphone objective-c sockets

我有问题。 我希望在CFDataRef中将我的对象“Position”转换为在TCP套接字中发送它。 我不知道我该怎么做。 你能救我吗?

@interface Position : NSObject {

    NSString *name;

    float valueX;
    float valueY;
    float valueZ;

}

-(BOOL)setValue:(NSString*)name:(float)valueX:(float)valueY:(float)valueZ;

@property (nonatomic,readwrite, retain)   NSString      *name;

@property (readwrite)   float      valueX;
@property (readwrite)   float      valueY;
@property (readwrite)   float      valueZ;


@end




//In another class after the correct connection.
    Position *tempPosition = [[Position alloc]init];

    for(int i=0; i<[arrayPosition count]; i++){
        tempPosition = [arrayPosition objectAtIndex:i];
        //I want have a CFDataRef of tempPosition for sending. dataSend is my CFDataRef variable
        CFSocketSendData(socketAccept, NULL, dataSend, 0);
        [NSThread sleepForTimeInterval:1];

    }

1 个答案:

答案 0 :(得分:0)

简短的回答是使用NSKeyedArchiver。看起来像这样并返回一个NSData对象(与 - 具有 - CFDataRef的免费电话桥相同):

NSData *tileData = [NSKeyedArchiver archivedDataWithRootObject:theTile];

(来自CopyPasteTile示例代码。)

但是,如果你在机器之间复制数据......我想知道这是否是正确的方法?根据{{​​3}}:

  

特别是,它不会处理   分布式时的字节顺序交换   在big-endian和little-endian之间   机器。 (在Cocoa中,使用NSValue   打字数据。)

我不是说它不会起作用,但它肯定是需要考虑的事情。