2010-02-03 4 views
5

हारून हिलेग्रास 'मैक ओएस एक्स के लिए कोको प्रोग्रामिंग, अध्याय 9, "सम्मिलन पर प्रारंभ संपादन" नामक अनुभाग, वह बताता है कि वास्तव में यह कैसे करना है। हालांकि मुझे उलझन में यह बात यह थी कि उसने गुच्छा अन्य सामानों के साथ किया था। यहाँ पूर्ण कोड सूची है:मैक ओएस एक्स_ अध्याय 9 के लिए हारून हिलेगैस _Cocoa प्रोग्रामिंग

- (IBAction)createEmployee:(id)sender 
{ 
NSWindow *w = [tableView window]; 

// Try to end any editing that is taking place 
BOOL editingEnded = [w makeFirstResponder:w]; 
if (!editingEnded) { 
    NSLog(@"Unable to end editing"); 
    return; 
} 
NSUndoManager *undo = [self undoManager]; 

// Has an edit occurred already in this event? 
if ([undo groupingLevel]) { 
    // Close the last group 
    [undo endUndoGrouping]; 
    // Open a new group 
    [undo beginUndoGrouping]; 
} 
// Create the object 
Person *p = [employeeController newObject]; 

// Add it to the content array of 'employeeController' 
[employeeController addObject:p]; 
[p release]; 
// Re-sort (in case the user has sorted a column) 
[employeeController rearrangeObjects]; 

// Get the sorted array 
NSArray *a = [employeeController arrangedObjects]; 

// Find the object just added 
int row = [a indexOfObjectIdenticalTo:p]; 
NSLog(@"starting edit of %@ in row %d", p, row); 

// Begin the edit in the first column 
[tableView editColumn:0 
        row:row 
      withEvent:nil 
       select:YES]; 
} 

मैं इस बारे में दो प्रश्न हैं:

1) कैसे आप जानते हैं कि यह सब सामान क्या करना चाहिए रहे हैं? क्या ऐप्पल के डॉक्टर में कोई 'चेकलिस्ट' या कुछ है? अनुभव?

2) क्या यह किसी भी सरणी नियंत्रक के पूरे उद्देश्य को पराजित नहीं करता है यदि आपको अभी भी सभी विधियों को फिर से लिखना है?

संपादित करें: मैं मुख्य रूप से सोच रहा हूँ कैसे वह में इन पंक्तियों डाल करने के लिए पता था: (के बाद से सब कुछ बहुत बुनियादी और स्पष्ट है)

NSWindow *w = [tableView window]; 

// Try to end any editing that is taking place 
BOOL editingEnded = [w makeFirstResponder:w]; 
if (!editingEnded) { 
    NSLog(@"Unable to end editing"); 
    return; 
} 
NSUndoManager *undo = [self undoManager]; 

// Has an edit occurred already in this event? 
if ([undo groupingLevel]) { 
    // Close the last group 
    [undo endUndoGrouping]; 
    // Open a new group 
    [undo beginUndoGrouping]; 
} 
+1

यह एक अच्छा सवाल है, और मैं मानता हूं कि पुस्तक में पर्याप्त रूप से समझाया नहीं गया है। जैसा कि कुछ उत्तरों बताते हैं, यह वास्तव में किसी भी चीज़ से अधिक अनुभव करने के लिए नीचे आता है। –

उत्तर

4

1) तुम्हें कैसे पता है कि तुम सब चीज़ों क्या करना चाहिए रहे हैं:

एक अच्छा लिंक मिला? वहाँ एक 'चेकलिस्ट' या एप्पल के दस्तावेज़ में कुछ है? अनुभव?

आप सही हैं, कि कोड सबसे एक प्रारंभिक कार्यान्वयन कर रही है लोगों के लिए उत्पन्न नहीं होगा। (मुझे लगता है कि क्यों यह किताब में है कि है। आप हारून के अनुभव से लाभ के लिए मिलता है)।

कि कोड एक या अधिक बग रिपोर्ट के परिणाम के रूप में आ गया होगा।दूसरे शब्दों में, आप शुरुआत में उस कोड के साथ नहीं आएंगे, लेकिन अंततः आप अंततः करेंगे।

इसे अपने लिए आज़माएं। उस कोड को निकालें, फिर देखें कि क्या आप चल रहे एप्लिकेशन में समस्याओं को खोज सकते हैं। उन समस्याओं को हल करने के लिए एसडीके ज्ञान और डिबगिंग कौशल के संयोजन की आवश्यकता होती है। दोनों अनुभव के साथ बढ़ते हैं।

2) क्या यह किसी भी सरणी नियंत्रक के पूरे उद्देश्य को पराजित नहीं करता है यदि आपको अभी भी सभी विधियों को फिर से लिखना है?

कोई तर्क दे सकता है कि तालिकादृश्य के व्यवहार को संशोधित करने की क्षमता सरणी नियंत्रक (आपके एप्लिकेशन के डिज़ाइन के तत्व के रूप में) का संपूर्ण बिंदु है।

2

1) वह चीजें हैं जो सुविधाओं अपने को लागू कर रहा है कार्यक्रम की आवश्यकता है। इसकी ऐप्पल चीज इतनी ज्यादा नहीं है (जैसे कि इस तरह के प्रोटोकॉल का पालन करते समय मुझे किन प्रतिनिधियों को लागू करना है) लेकिन यह है उनके कार्यक्रम का प्रवाह। इस समस्या को हल करने के लिए शायद दस लाख तरीके हैं।

2) सुनिश्चित नहीं हैं कि तुम क्या मतलब है, लेकिन वह तरीकों में बनाया का एक बहुत का उपयोग कर किया जा रहा है - मैं न उसे वास्तव में फिर से खोज करने पहिया देखना (उदाहरण:)

Person *p = [employeeController newObject]; 

// Add it to the content array of 'employeeController' 
[employeeController addObject:p]; // <-- built in method 
[p release]; // <-- built in method 
// Re-sort (in case the user has sorted a column) 
[employeeController rearrangeObjects]; // <-- built in method 

// Get the sorted array 
NSArray *a = [employeeController arrangedObjects]; // <-- built in method 

// Find the object just added 
int row = [a indexOfObjectIdenticalTo:p]; // <-- built in method 

संपादित

ठीक है, तो पहले संदेश के लिए, [w makeFirstResponder: w]; हम यहां से देख सकते हैं (http://developer.apple...NSWindow/makeFirstResponder) कि NSWindow का एक उदाहरण MakeFirstResponder संदेश का समर्थन करता है। NSWindow के लिए यह करने के लिए मेरी समझ है, ताकि जब उपयोगकर्ता इसे साथ सूचना का आदान, यह पहली प्रत्युत्तर हो जाएगा, दूसरे शब्दों में, यह NSWindow के लिए किसी भी कार्रवाई प्राप्त होगा। और इसके द्वारा, मेरा मतलब है 'डब्ल्यू'।

1) आप कैसे जानते हैं कि आपको यह सब सामान है? क्या 'चेकलिस्ट' या ऐप्पल के दस्तावेज़ में कुछ है? अनुभव?

महान प्रश्न - मुझे लगता है कि यह अनुभव के साथ आता है और सभी प्रकार के वर्गों और यूआई नियंत्रणों के साथ काम करता है। हे =] मैं नहीं जानता कि ... शायद किसी को एक बेहतर जवाब है। मुझे सीखना अच्छा लगेगा! http://www.cocoadev.com/index.pl?FirstResponder

+0

उत्तर के लिए धन्यवाद। हालांकि मैंने प्रश्न में किए गए संपादन को देखें। मैं मुख्य रूप से सोच रहा हूं कि _how_ वह उन पंक्तियों को जोड़ना जानता था जो पहले-रेंडर और पूर्ववत प्रबंधक से निपटते हैं। – chrisgoyal

1

मुझे लगता है कि वह उन लाइनों के बिना इसे लागू कर सकता है, पूर्ववत समस्याएं थीं, और उन्होंने मुद्दों को डीबग और ठीक कर दिया।