2009-11-04 8 views
7

मान लें, उदाहरण के लिए, मैं कोको में आईट्यून्स क्लोन ऐप लिख रहा था, जिसे कोरडाटा द्वारा समर्थित किया गया था। सरलीकरण के लिए, मान लीजिए कि संगीत, फिल्में, रेडियो इत्यादि जैसी चीजों के साथ दो "खंड", "लाइब्रेरी" हैं और "प्लेलिस्ट" नामक एक दूसरा खंड है जिसमें उपयोगकर्ता द्वारा जेनरेट की गई प्लेलिस्ट (केवल गूंगा सूचियां, स्मार्ट प्लेलिस्ट नहीं हैं) ।कोटा में बाइंडिंग + कोरडाटा के साथ आईट्यून्स-शैली स्रोत-सूची कैसे कार्यान्वित की जाएगी?

तो सोर्सलिस्ट स्वयं को आमतौर पर NSOutlineView के साथ कार्यान्वित किया जाएगा, जो आमतौर पर सीधा है।

स्रोत सूची का लाइब्रेरी अनुभाग वास्तव में उपयोगकर्ता द्वारा उत्पन्न कुछ भी नहीं करता है, केवल ऐप (संक्षेप में) की "विशेषताएं" जहां प्लेलिस्ट अनुभाग केवल उपयोगकर्ता द्वारा बनाई गई कस्टम सूचियां रखता है। बाइंडिंग्स और कोरडाटा के साथ यह कैसे करेगा? क्या प्लेलिस्ट अनुभाग को उपयोगकर्ता के डेटा में बाध्य करना संभव है और लाइब्रेरी सुविधाओं को प्रदर्शित करने का एक कस्टम तरीका है?

मैं अभी भी अपने पैरों को बाइंडिंग्स और ऐपकिट के साथ गीला कर रहा हूं, इसलिए कृपया मेरे साथ भालू। मैं मदद की सराहना करता हूं। मुझे जोड़ना चाहिए, मैं 10.6 और उससे ऊपर लक्ष्यीकरण कर रहा हूं।

उत्तर

6

मुझे कोर डेटा के साथ बहुत अधिक अनुभव नहीं मिला है, लेकिन मैंने कोको के बाइंडिंग का व्यापक उपयोग किया है। मेरे अनुभव में, इस तरह की कुछ चीजें "मैन्युअल" समायोजित वस्तुओं के मध्यवर्ती NSArray के साथ सबसे अच्छी तरह से काम करती हैं।

उदाहरण के तौर पर, मुझे लगता है कि आपके पास उपयोगकर्ता द्वारा जेनरेट की गई प्लेलिस्ट के कस्टम NSArray होंगे, और आपके पास अलग-अलग NSArray भी होंगे जो आपके मानक लाइब्रेरी आइटम होंगे। इस सेटअप के साथ, मैं combinedArray नामक आपके नियंत्रकों में से एक में एक संपत्ति बनाउंगा, जो आपके NSOutlineView से जुड़ी संपत्ति होगी। फिर मैं आपके उपयोगकर्ता द्वारा जेनरेट की गई प्लेलिस्ट सरणी को नियंत्रक को बांध दूंगा, और जब भी प्लेलिस्ट सरणी संशोधित होती है तो नियंत्रक में कुछ कोड स्वचालित रूप से संयुक्त सरणी को अपडेट करते हैं।

TheController.h

@interface TheController : NSObject 
{ 
    NSArray * combinedArray; 
    NSArray * userPlaylists; 
} 
@property (retain) NSArray * combinedArray; 
@property (copy) NSArray * userPlaylists; 
@end 

TheController.m

@implementation TheController 

@synthesize combinedArray; 
@synthesize userPlaylists; 
- (void)setUserPlaylists:(NSArray *)newLists 
{ 
    // standard property setting code: 
    if (newLists != userPlaylists) 
    { 
     [userPlaylists release]; 
     userPlaylists = [newLists copy]; 
    } 

    // modify the combined array: 
    NSMutableArray * allItems = [NSMutableArray arrayWithCapacity:0]; 
    [allItems addObjectsFromArray:standardLibrary]; 
    [allItems addObjectsFromArray:userPlaylists]; 
    [self setCombinedArray:allItems]; 
} 

@end 
:

यहां एक त्वरित नकली है

+0

यह वही है जो मैं सोच रहा था कि करने की आवश्यकता होगी। तो 'setUserPlaylists' बाइंडिंग द्वारा बुलाया जाने वाला एक तरीका होगा? जब मैं बाइंडिंग कैसे काम करता हूं, तो मैं अविश्वसनीय रूप से धुंधला हूं (मुझे केवीसी से उनका संबंध पता है लेकिन वे वास्तव में ऐरे/ट्री कंट्रोलर के साथ कैसे कॉन्फ़िगर किए जाते हैं, फिर भी मुझे परेशान करते हैं)। – jbrennan

+1

हाँ।कोको दृश्यों के पीछे सभी बाध्यकारी जादू का ख्याल रखता है। आपको बस इतना करना है कि केवीओ/केवीसी को संतुष्ट करने वाली संपत्ति को परिभाषित किया जाए। कोई भी संपत्ति जिसे आप @ सिंथेसाइज करना चाहते हैं, उस आवश्यकता को पूरा करेगा, और जब भी आप [self setSomePropertyName: someValue] का उपयोग करेंगे, उपयुक्त केवीसी संदेश भेजे जाएंगे। संपत्ति सेटर को अवरुद्ध करना (जैसा कि मैंने ऊपर दिखाया है) पूरी तरह से कानूनी है। मुझे यकीन नहीं है कि उपयोगकर्ता डेटालिस्ट (कोरडाटा से कुछ, मुझे लगता है) के लिए आपका डेटा स्रोत क्या है, लेकिन यदि आप इसे अपने नियंत्रक से जोड़ते हैं, तो नियंत्रक को 'setUserPlaylists:' संदेश प्राप्त होगा जब भी वह सूची संशोधित हो। –

1

चूंकि इस मामले में स्रोत सूची वास्तव में "स्कोप" है और कुछ "लाइब्रेरीइटम" इकाई के उदाहरणों के अलावा कुछ भी नहीं है, मुझे लगता है कि इसे "पुराने फैशन" तरीके (यानी, तालिका) को कार्यान्वित करना आसान है डेटा स्रोत प्रोटोकॉल)।

यह आपको अपने स्टोर से वस्तुओं के साथ "स्थिर" वस्तुओं (जैसे "लाइब्रेरी" और "संगीत", और "मूवीज़", "प्लेलिस्ट") को कैसे/कब मिश्रण करना है (जैसे व्यक्तिगत प्लेलिस्ट "प्लेलिस्ट" अनुभाग के तहत आइटम)।

मेरी राय में, प्लेलिस्ट आइटम को आपके "मूवीज़" समूह पर छोड़ने से रोकते समय यह महत्वपूर्ण है कि मेरी राय में ड्रैग और ड्रॉप से ​​निपटना थोड़ा आसान है।

संबंधित मुद्दे