আমি কীভাবে এনএসডেটরিয়াকে এনএসডিটাতে এবং এর বিপরীতে রূপান্তর করতে পারি?


158

আমি ব্লুটুথ প্রেরণ NSStringএবং UIImageব্যবহার করছি । আমি উভয়টি NSDictionaryএকটিতে সংরক্ষণ করার এবং পরে অভিধানে রূপান্তর করার সিদ্ধান্ত নিয়েছি NSData।

আমার প্রশ্ন হ'ল বিপরীতে কীভাবে রূপান্তর NSDictionaryকরা যায় NSData?

উত্তর:


361

এনএসডি অভিধান -> এনএসডিটা:

NSData *myData = [NSKeyedArchiver archivedDataWithRootObject:myDictionary];

এনএসডাটা -> এনএসডেটরিজ:

NSDictionary *myDictionary = (NSDictionary*) [NSKeyedUnarchiver unarchiveObjectWithData:myData];

এনএসডিটা -> এনএসডেটরিয়ালের জন্য, এনএসডেটরিয়ায় কাস্ট করা অপ্রয়োজনীয় বলে মনে হচ্ছে।
— পাইং

51

এনএসডি অভিধান -> এনএসডিটা:

NSMutableData *data = [[NSMutableData alloc] init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:yourDictionary forKey:@"Some Key Value"];
[archiver finishEncoding];
[archiver release];

// Here, data holds the serialized version of your dictionary
// do what you need to do with it before you:
[data release];

এনএসডাটা -> এনএসডি অভিধান

NSData *data = [[NSMutableData alloc] initWithContentsOfFile:[self dataFilePath]];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
NSDictionary *myDictionary = [[unarchiver decodeObjectForKey:@"Some Key Value"] retain];
[unarchiver finishDecoding];
[unarchiver release];
[data release];

এনএসকোডিং অনুসারে যে কোনও শ্রেণীর সাথে আপনি এটি করতে পারেন।

উৎস


1
এই উত্তর থেকে কিছু না নেওয়ার জন্য, তবে কেবল একটি মাথা যে এটি
— আরসি

10
হ্যাঁ, আমার উত্তরটি ২০১১ সাল থেকে যেখানে এআরসি উপস্থিত ছিল না
— লিওনস

41

এনএসজেএসএসনারাইজেশন ব্যবহার করুন:

NSDictionary *dict;
NSData *dataFromDict = [NSJSONSerialization dataWithJSONObject:dict
                                                       options:NSJSONWritingPrettyPrinted
                                                         error:&error];

NSDictionary *dictFromData = [NSJSONSerialization JSONObjectWithData:dataFromDict
                                                             options:NSJSONReadingAllowFragments
                                                               error:&error];

সর্বশেষতম রিটার্নস id, সুতরাং আপনি কাস্ট করার পরে ফিরে আসা অবজেক্টের ধরণটি পরীক্ষা করা ভাল ধারণা (এখানে আমি এনএসডি অভিধানে কাস্ট করেছি)।


23

ইন সুইফট 2 আপনি এই ভাবে এটা করতে পারেন:

var dictionary: NSDictionary = ...

/* NSDictionary to NSData */
let data = NSKeyedArchiver.archivedDataWithRootObject(dictionary)

/* NSData to NSDictionary */
let unarchivedDictionary = NSKeyedUnarchiver.unarchiveObjectWithData(data!) as! NSDictionary

ইন সুইফট 3 :

/* NSDictionary to NSData */
let data = NSKeyedArchiver.archivedData(withRootObject: dictionary)

/* NSData to NSDictionary */
let unarchivedDictionary = NSKeyedUnarchiver.unarchiveObject(with: data)

এটা কাজ করছে না ! সুইফট 3 সমমানের কোডটি কার্যকর হয়নি। যাক ডেটা = এনএসকিডআরচিভার.আরভিভডডেটা (সাথে রটওজেক্ট: ডেটাফ্রোমেটওয়ার্ক) [[_সইউফটভ্যালু এনকোড উইথকোডার:]: অচেনা নির্বাচককে উদাহরণ হিসাবে প্রেরণ করা হয়েছে ...
— mythicalcoder

আপনার দ্রুত প্রতিক্রিয়া প্রশংসা করুন। আমি যা বোঝাতে চেয়েছি তা হ'ল - সুইফ্ট 3 কোডটিও কাজ করে না। আমার ডেটা 3lvis / নেটওয়ার্কিং এইচটিটিপি লাইব্রেরি থেকে আসে, এটি Any?টাইপ হয়। তবে এটি থেকে রূপান্তর NSDictionaryকরতে ত্রুটি দেখিয়েছে NSData। সুতরাং আমি আপনার কোড চেষ্টা করেছিলাম। এটা কাজ করে না.
— পৌরাণিক

17

এনএসডাটা থেকে এনএসডি অভিধান

http://www.cocoanetics.com/2009/09/nsdictionary-from-nsdata/

এনএসডাটা এনএসডাটা

আপনি তার জন্য এনএসপোপার্টিলিস্টরিশায়নের ক্লাস ব্যবহার করতে পারেন। এর পদ্ধতিটি একবার দেখুন:

+ (NSData *)dataFromPropertyList:(id)plist format:(NSPropertyListFormat)format
                              errorDescription:(NSString **)errorString

একটি নির্দিষ্ট বিন্যাসে প্রদত্ত সম্পত্তি তালিকার একটি এনএসডাটা অবজেক্ট ফেরত দেয়।


এটি বেশিরভাগ ম্যাক ওএস বিকাশকারীদের জন্য একটি খুব মার্জিত সমাধান।
— mjl007

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.