सोचा कि मैं इस पर चिपकूँगा। सबसे पहले बात यह है कि संपत्ति को कैसे अपनी पुल में एक बूल वैल्यू परिभाषित किया जाए?
<!ENTITY % plistObject "(array | data | date | dict | real | integer | string | true | false)" >
और बाद में:
Apple's DTD for plist एक सभ्य सुराग देता है
<!-- Numerical primitives -->
<!ELEMENT true EMPTY> <!-- Boolean constant true -->
<!ELEMENT false EMPTY> <!-- Boolean constant false -->
सभी महान है, लेकिन कैसे plist में है कि लगता है?
ठीक है, एक सच्चे मूल्य के लिए, यह होगा:
<dict>
<key>employeeId</key>
<integer>1</integer>
<key>name</key>
<string>Joe Smith</string>
<key>worksRemotely</key>
<true/>
</dict>
और झूठे के लिए निश्चित रूप से:
<dict>
<key>employeeId</key>
<integer>1</integer>
<key>name</key>
<string>Joe Smith</string>
<key>worksRemotely</key>
<false/>
</dict>
Objectify की एक गहरी उपयोगकर्ता के रूप में plist से एक वस्तु बनाने के लिए, मैं उनके कारखाने वर्गों से प्रेरणा लेता हूं। मेरे Employee
वर्ग इन तरीकों होगा:
+ (Employee *)instanceFromDictionary:(NSDictionary *)aDictionary {
Employee *instance = [[Employee alloc] init];
[instance setAttributesFromDictionary:aDictionary];
return instance;
}
कि बारी में कॉल:
- (void)setAttributesFromDictionary:(NSDictionary *)aDictionary {
if (![aDictionary isKindOfClass:[NSDictionary class]]) {
return;
}
[self setValuesForKeysWithDictionary:aDictionary];
}
setValuesForKeysWithDictionary:aDictionary
NSKeyValueCoding Protocol का एक सदस्य है। यह प्रत्येक NSObject
के साथ उपलब्ध है जिसका अर्थ है NSObject
के उप-वर्ग के रूप में, हमारी Employee
कक्षा इसे मुफ्त में प्राप्त करती है।
जब तक मेरी कर्मचारी वर्ग 'गुण plist, अर्थात् employeeId
, name
, और worksRemotely
में निर्दिष्ट कुंजी मूल्यों के साथ मेल खाते हैं, तो मैं कुछ और करने की जरूरत नहीं होगी। यही कारण है कि विधि मेरी कक्षा उदाहरण में worksRemotely
बूलियन सही मान को plist में निर्दिष्ट अनुवाद करेगा:
@property (assign, nonatomic, getter = isWorkingRemotely) BOOL worksRemotely;
अब सिर्फ़ plist सामग्री के माध्यम से पुनरावृति करने के लिए है, मेरे वांछित वर्ग के उदाहरण बनाने, bool शामिल:
NSString *plistPath = [[NSBundle bundleForClass:[self class]] pathForResource:@"employees" ofType:@"plist"];
NSArray *employeeDictionaries = [NSArray arrayWithContentsOfFile:plistPath];
for (NSDictionary *employeeDict in employeeDictionaries) {
Employee *employee = [Employee instanceFromDictionary:employeeDict];
[employees addObject:employee];
}
कोई संदेह नहीं है कि मैं विशिष्ट प्रश्न का उत्तर देने के लिए शीर्ष पर थोड़ा सा चला गया हूं। हालांकि उम्मीद है कि यह किसी अन्य व्यक्ति के लिए उपयोग किया जा सकता है जो इस सवाल पर ठोकर खा रहा था कि मैं जो कोशिश कर रहा था, करने की कोशिश कर रहा था, यानी एक प्लेलिस्ट में एक बूलियन मूल्य के साथ एक वर्ग बनाएं।