私はbluetoothを使用して2つのデバイス間でデータを転送しようとしています。カスタムNSObjectをNSDataに変換したいカスタムNSObjectをNSDataに変換する
受信したNSDataをカスタムNSObjectにデコードする最適な方法は何ですか?
ありがとうございます!
私はbluetoothを使用して2つのデバイス間でデータを転送しようとしています。カスタムNSObjectをNSDataに変換したいカスタムNSObjectをNSDataに変換する
受信したNSDataをカスタムNSObjectにデコードする最適な方法は何ですか?
ありがとうございます!
NSCoding
を使用する必要があります。 NSCoding
は、単純なプロトコルで、2つの方法、initWithCoder:
およびencodeWithCoder:
があります。 NSCoding
に準拠するクラスは、ディスクにアーカイブすることも、ネットワークに分散させることもできるデータにシリアル化およびデシリアライズすることができます。
NSCoding/NSKeyedArchiver. NSCoding
のチュートリアルです。
アーカイブ
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:YourClass];
アーカイブ解除
YourClass *objYourClass = [NSKeyedUnarchiver unarchiveObjectWithData:data];
また、私のanswerを参照することができます。まず、Beanクラスを作成し、NSData
をBeanクラスオブジェクトから、そしてUnarchive BeanクラスオブジェクトをNSData
からArchiveできるようにしてから、initWithCoder:
とencodeWithCoder:
を実装する必要があります。
私の非常に単純な答え
まず、我々はNSObject.mでencodeWithCoderとinitWithCoderを実装する必要があり、私はNSObjectのClass.For例では2つのデータ(ユーザー名とパスワード)を持って、その前に、私はthis.Youが理解できる設定
- (void)encodeWithCoder:(NSCoder *)encoder
{
//Encode properties, other class variables, etc
[encoder encodeObject:@"Dev" forKey:@"username"];
[encoder encodeObject:@"[email protected]" forKey:@"password"];
}
- (id)initWithCoder:(NSCoder *)decoder
{
if((self = [super init]))
{
//decode properties, other class vars
userName = [decoder decodeObjectForKey:@"username"];
passWord = [decoder decodeObjectForKey:@"password"];
}
return self;
}
次にViewController.mで
NSObjectClass *className = [[NSObjectClass alloc]init];
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:className];
[currentDefaults setObject:data forKey:@"DATA"];
[currentDefaults synchronize];
保存
のために
ために、さらに詳細にはあなたのクラスNSCodingに準拠させるとJSONに `NSKeyedArchiver`、または翻訳を使用して(と` initWithJSONを作成することができます私のANSWER
て行くために
を取得: 'カスタムをinit)など – Larme