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


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.