ভাল অভ্যাস? - মূল তথ্য সত্ত্বার বৈশিষ্ট্য হিসাবে অ্যারে / অভিধান


176

আমি কোর ডেটাতে নতুন। আমি লক্ষ করেছি যে সংগ্রহের প্রকারগুলি অ্যাট্রিবিউট টাইপের হিসাবে উপলব্ধ নয় এবং এটি জানতে চান যে বৈশিষ্ট্য হিসাবে অ্যারে / অভিধান টাইপ ডেটা সংরক্ষণ করার সবচেয়ে কার্যকর উপায়টি কী (উদাহরণস্বরূপ যে উপাদানগুলি রাস্তা, শহর ইত্যাদির মতো ঠিকানা তৈরি করে) একটি পৃথক সত্তা প্রয়োজন হয় না এবং পৃথক বৈশিষ্ট্য / ক্ষেত্রের তুলনায় ডিকশনারি / অ্যারে হিসাবে বেশি সুবিধাজনকভাবে সংরক্ষণ করা হয়)। ধন্যবাদ.


6
ঠিকানার জন্য স্ট্রিং ফিল্ড সহ একটি সত্তা তৈরি করা আপনার
ড্যানিয়েল

উত্তর:


247

কোর ডেটাতে কোনও "নেটিভ" অ্যারে বা অভিধানের ধরণ নেই। আপনি একটি NSArrayবা একটি NSDictionaryএকটি রূপান্তরযোগ্য বৈশিষ্ট্য হিসাবে সঞ্চয় করতে পারেন । এটি NSCodingকোনও NSDataবৈশিষ্ট্যে অ্যারে বা অভিধানকে সিরিয়ালাইজ করতে ব্যবহার করবে (এবং অ্যাক্সেসের পরে এটিকে যথাযথভাবে ডিসরিয়ালাইজ করবে)। এই পদ্ধতির সুবিধা হ'ল এটি সহজ। খারাপ দিকটি হ'ল আপনি অ্যারে বা অভিধানে জিজ্ঞাসা করতে পারবেন না (এটি ডেটা স্টোরের একটি বিএলএলবি হিসাবে সঞ্চিত) এবং যদি সংগ্রহগুলি বড় হয় তবে আপনাকে অনেকগুলি ডেটা স্টোর থেকে / থেকে সরিয়ে নিতে হবে (যদি এটি হয় তবে একটি এসকিউএলাইট ডেটা স্টোর) কেবলমাত্র সংগ্রহের একটি ছোট্ট অংশ পড়তে বা সংশোধন করতে।

বিকল্পটি হ'ল অ্যারে বা অভিধান সংগ্রহের শব্দার্থক মডেল করতে বহু ডেটা থেকে বহু সম্পর্কের ব্যবহার। অ্যারেগুলি আরও সহজ, সুতরাং এটি দিয়ে শুরু করা যাক। মূল ডেটা থেকে বহু সম্পর্কের জন্য একটি সেট সত্যই মডেলিং করা হয়, সুতরাং আপনার যদি অ্যারের মতো কার্যকারিতা প্রয়োজন হয় তবে আপনাকে সেটটি বাছাই করতে হবে (একটি আনীত সম্পত্তি ব্যবহার করা এটি করার একটি সুবিধাজনক উপায়) অথবা সত্তায় অতিরিক্ত সূচক বৈশিষ্ট্য যুক্ত করতে হবে যা অ্যারে আইটেমগুলি সঞ্চয় করে এবং সূচীগুলি নিজেই পরিচালনা করে। আপনি যদি একজাতীয় অ্যারে (সমস্ত এন্ট্রি একই ধরণের) সঞ্চয় করে থাকেন তবে অ্যারের সত্তাগুলির জন্য সত্তার বিবরণটি মডেল করা সহজ। যদি তা না হয় তবে আপনাকে সিদ্ধান্ত নিতে হবে আইটেমের ডেটা সঞ্চয় করার জন্য কোনও ট্রান্সফরমাল অ্যাট্রিবিউট ব্যবহার করতে হবে বা আইটেম সত্তার একটি পরিবার তৈরি করতে হবে।

অভিধানের মডেলিংয়ের জন্য সম্ভবত একটি কী এবং মান সংরক্ষণ করে এমন সংস্থাগুলির একটি সংস্থার সাথে একাধিক সম্পর্ক প্রয়োজন। উপরে বর্ণিত অ্যারের আইটেম সত্তার সাথে কী এবং মান উভয়ই অভিন্ন। সুতরাং তারা হয় দেশীয় প্রকার হতে পারে (যদি আপনি তাদের আগে আগে জানেন), একটি রূপান্তরযোগ্য বৈশিষ্ট্য বা টাইপ-নির্দিষ্ট সত্ত্বার পরিবারের কোনও পরিবারের উদাহরণ হতে পারে।

যদি এই কিছুটা কিছু ভয়ঙ্কর মনে হয় তবে তা। কোর ডেটার মতো স্কিমা-নির্ভর কাঠামোর মধ্যে জুতোহীন স্বেচ্ছাসেবক ডেটা শক্ত।

কাঠামোগত তথ্যের জন্য, ঠিকানার মতো, সত্তাগুলি স্পষ্টভাবে মডেলিংয়ের সময় ব্যয় করা প্রায় সর্বদা সহজ (যেমন ঠিকানার প্রতিটি অংশের জন্য একটি বৈশিষ্ট্য)। অভিধানের মডেল করার জন্য সমস্ত অতিরিক্ত কোড এড়ানো ছাড়াও এটি আপনার ইউআইকে সহজ করে তোলে (বাইন্ডিংগুলি "কেবলমাত্র কাজ করবে") এবং আপনার বৈধতা যুক্তি ইত্যাদি অনেক বেশি পরিষ্কার কারণ যেহেতু এর বেশিরভাগ অংশ কোর ডেটা দ্বারা পরিচালিত হতে পারে।

হালনাগাদ

ওএস এক্স 10.7 হিসাবে, কোর ডেটাতে একটি অর্ডার করা সেট টাইপ রয়েছে যা অ্যারের জায়গায় ব্যবহার করা যেতে পারে। আপনি যদি 10.7 বা তার পরে লক্ষ্য করতে পারেন তবে অর্ডার করা (অ্যারের মতো) সংগ্রহের সেরা সমাধান এটি।


দ্বিতীয় - আমি ইতিমধ্যে যা ভেবেছিলাম তা নিশ্চিত করেছিলাম তবে রূপান্তরযোগ্য গুণাবলী সম্পর্কে আমি জানতাম না।
jkp

3
@ পিক্সেলফ্রিয়াক ট্রান্সফরমাল ব্যবহার আপনার সংগ্রহের আইটেমগুলি কীভাবে ব্যবহার করতে হবে তার উপর নির্ভর করে । আপনার যদি তাদের বিরুদ্ধে জিজ্ঞাসা করার প্রয়োজন হয় বা আপনি কিছু বা সমস্ত কিছুটি আলস্যভাবে লোড করতে সক্ষম হতে চান তবে ট্রান্সফর্মেবল বৈশিষ্ট্যটি কাজ করবে না। তুমি অলস লোড প্রয়োজন না থাকে, তাহলে ক্যোয়ারী করতে হবে না এবং সবসময় প্রয়োজন সব একটি transformable অ্যাট্রিবিউট আপনার জন্য কাজ করতে পারে আইটেম বা কেউ না, এর (এবং অবশ্যই সহজ বাস্তবায়ন হয়)।
ব্যারি ওয়ার্ক

3
ব্যারি যা বলেন তা কোর ডেটা প্রোগ্রামিং গাইড, অধ্যায় অ-মানক স্থায়ী বৈশিষ্ট্যগুলিতে আরও বিশদে বর্ণিত হয়েছে ।
Palimondo

2
অর্ডার করা সেটগুলি সম্পর্কে সতর্কতার একটি নোট: এগুলি বহু পক্ষের কয়েক হাজারেরও বেশি অবজেক্টের সাথে বহু সম্পর্কের জন্য ব্যবহার করবেন না। যদি আপনি এটি করেন, সংরক্ষণ করা এত দীর্ঘ সময় নিতে শুরু করতে পারে যা এটি থ্রেডটিকে অবরুদ্ধ করে।
কির্ক ভ্যান গোর্কম

2
আমি "নতুন অর্ডার করা সেট" সম্পর্কে বুঝতে পারি না। এটি একটি বৈশিষ্ট্য? কারণ আমি এট্রিবিউট টাইপ মেনুতে এটি দেখতে পাচ্ছি না।
প্লট করুন

11

আমারও একি দশা. আমার ক্ষেত্রে, আমি স্ট্রিংগুলির একটি অ্যারে মানচিত্র করতে চেয়েছিলাম। আমি ব্যারির পরামর্শ অনুসরণ করে অবশেষে এটি কার্যকর হয়ে গেলাম। কিছু কোড দেখতে দেখতে যা এখানে রয়েছে (যা আশা করি যে এর মধ্যে যে কেউ আসে সেগুলির পক্ষে বিষয়গুলি স্পষ্ট করে দেওয়া হবে) ...

আমার সত্তা এইরকম কিছু দেখাচ্ছে:

@interface AppointmentSearchResponse : NSManagedObject
@property (nonatomic, retain) NSSet *messages;
@end

আমার ম্যানেজ করা অবজেক্ট মডেল কোড (কোর ডেটা) কোডটি দেখতে এরকম কিছু দেখাচ্ছে:

NSEntityDescription *entityDescription = [[NSEntityDescription alloc] init];
[entityDescription setName:@"AppointmentSearchResponse"];
[entityDescription setManagedObjectClassName:@"AppointmentSearchResponse"];

NSMutableArray *appointmentSearchResponseProperties = [NSMutableArray array];
NSAttributeDescription *messageType = [[NSAttributeDescription alloc] init];    
[messageType setName:@"messages"];
[messageType setAttributeType:NSTransformableAttributeType];
[appointmentSearchResponseProperties addObject:messageType];

[entityDescription setProperties:appointmentSearchResponseProperties];

সুতরাং এখানে মূল আইটেমগুলি হ'ল:

  • আমি সম্পত্তি ধরণের জন্য একটি এনএসএসেট ব্যবহার করছি
  • আমি কোর ডেটা ম্যানেজড অবজেক্ট মডেলটিতে অ্যাট্রিবিউট টাইপ হিসাবে এনএসটি ট্রান্সফরমাল অ্যাট্রিবিউটটাইপ ব্যবহার করছি।

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