
Για παράδειγμα, <http://developer.apple.com/cocoa/pyobjc.html> εξακολουθεί να είναι για το OS X 10.4 Tiger, δεν 10.5 Leopard .. Και αυτή είναι η επίσημη τεκμηρίωση της Apple για αυτό ..


Η επίσημη σελίδα PyObjC είναι εξίσου κακό, <http://pyobjc.sourceforge.net/>


Είναι τόσο κακό αυτό είναι μπλέκοντας .. Σκέφτομαι μάθηση Ruby κυρίως επειδή η ουσία RubyCocoa είναι τόσο πολύ καλύτερα τεκμηριωμένες, και υπάρχουν πολλά αξιοπρεπή tutorials ( <http://www.rubycocoa.com/> για παράδειγμα), και λόγω των Παπούτσια GUI toolkit ..


Ακόμη και [αυτό το άσχημα-auto-μεταφραστεί ιαπωνική φροντιστήριο](http://66.163.168.225/babelfish/translate_url_content?lp=ja_en&url=http%3A%2F%2Fblog.monospace.jp%2F2007%2F11%2F05%2Fxcode3_cocoa_python%2F&fr=avbbf-us&.intl=us) είναι πιο χρήσιμο από ό, τι στην υπόλοιπη τεκμηρίωση θα μπορούσα να βρω ..


Το μόνο που θέλω να κάνω είναι να δημιουργήσει αρκετά απλές εφαρμογές Python με το κακάο GUI του ..   

Μπορεί κανείς να ρίξει φως στο φρικτό έγγραφα ή σημείο μου σε μερικά σεμινάρια που όχι μόνο θα δώσει τεράστια μπλοκ του κώδικα και να αναλάβουν ξέρετε τι `NSThread.detachNewThreadSelector_toTarget_withObject_(queryController, self, None)`κάνει .. ;

 
Γιατί είναι η τεκμηρίωση PyObjC τόσο κακό;
==========================================



Συμφωνώ ότι το φροντιστήριο είναι εσφαλμένη, ρίχνει τυχαία, ανεξήγητη κώδικα ακριβώς μπροστά από τα μάτια σας. Εισάγει έννοιες όπως το απόθεμα αυτόματης και προεπιλογές του χρήστη χωρίς να εξηγήσει γιατί θα τους θέλουν ( «αυτόματης κυκλοφορίας στην πισίνα για τη διαχείριση της μνήμης» δεν είναι καθόλου μια εξήγηση).


Εχοντας πεί αυτό…



> 
> Βασικά το μόνο που θέλω να κάνετε είναι να γράψετε εφαρμογές για το κακάο, χωρίς να χρειάζεται να μάθουν ObjC.
> 
> 
> 


Φοβάμαι ότι προς το παρόν, που *θα* χρειαστείτε μια βασική κατανόηση της ObjC, προκειμένου να επωφεληθεί από οποιαδήποτε γλώσσα που χρησιμοποιεί το κακάο. PyObjC, RubyCocoa, Nu και άλλοι είναι κόγχες, στην καλύτερη περίπτωση, και όλοι τους είχαν αναπτυχθεί από ανθρώπους στενά εξοικειωμένοι με το INS και outs της ObjC *και* κακάο.


Προς το παρόν, θα ωφεληθεί περισσότερο αν δείτε ρεαλιστικά αυτές τις γέφυρες ως χρήσιμο όταν γλώσσες προγραμματισμού πραγματικά λάμπει, αντί να προσπαθεί να χτίσει μια ολόκληρη εφαρμογή τους. Αν και αυτό *έχει* γίνει (με LimeChat, είμαι χρησιμοποιώντας ένα RubyCocoa-γραπτή app τώρα), είναι σπάνια και κατά πάσα πιθανότητα θα είναι για λίγο.

 

Αυτή η απάντηση δεν πρόκειται να είναι πολύ χρήσιμη, αλλά, ως προγραμματιστής μπορώ να τα κάνω τεκμηρίωση. Αυτό είναι ένα έργο ανοικτού κώδικα, είναι δύσκολο να βρούμε ανθρώπους να κάνουν την τεκμηρίωση.

 

Τομ τα λέει όλα πραγματικά. Πολλά έργα ανοικτού κώδικα έχουν αφιερωμένη προγραμματιστές και τους λίγους που ενδιαφέρονται για την τεκμηρίωση. Δεν βοήθησε το γεγονός ότι τέρματα μπορούν να στραφούν σε καθημερινή βάση, που σημαίνει έγγραφα, όχι μόνο πρέπει να δημιουργηθεί, αλλά διατηρούνται.

 

Ανταπόκριση του Tom και ο Martin είναι σίγουρα αλήθεια (ακριβώς για οποιοδήποτε έργο ανοικτού πηγαίου κώδικα, θα διαπιστώσετε ότι οι περισσότεροι συμμετέχοντες ενδιαφέρονται ιδιαίτερα, αλλά, *την ανάπτυξη* ? Όχι τόσο σε ημι-θέματα όπως η τεκμηρίωση), αλλά δεν το κάνω σκεφτείτε συγκεκριμένη ερώτηση σας στο τέλος θα ταίριαζε καλά μέσα τεκμηρίωση PyObjC.



```
NSThread.detachNewThreadSelector_toTarget_withObject_("queryController", self, None)

```

`NSThread`είναι μέρος του API κακάο, και ως εκ τούτου [τεκμηριωμένες πάνω στην Apple](http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSThread_Class/Reference/Reference.html) , συμπεριλαμβανομένης της συγκεκριμένης μεθόδου `+ detachNewThreadSelector:toTarget:withObject:`(είχα συνδέσει εκεί, αλλά προφανώς Stackoverflow έχει σφάλματα με την ανάλυση αυτή). Το wiki CocoaDev [έχει επίσης ένα άρθρο](http://cocoadev.com/index.pl?NSThread) .


Δεν νομίζω ότι θα ήταν μια καλή ιδέα για PyObjC να προσπαθήσει να τεκμηριώσει το κακάο, εκτός από μερικά βασικά παραδείγματα για το πώς να το χρησιμοποιήσετε μέσα από την Python. Εξηγώντας επιλογείς είναι επίσης πιθανό εκτός του πεδίου εφαρμογής της PyObjC, όπως εκείνες που, επίσης, είναι ένα χαρακτηριστικό του στόχου-C, δεν PyObjC ειδικώς.

 

Σκόνταψα σε ένα καλό φροντιστήριο για PyObjC / Κακάο:


<http://lethain.com/entry/2008/aug/22/an-epic-introduction-to-pyobjc-and-cocoa/>

 


> 
> Το μόνο που θέλω να κάνω είναι να δημιουργήσει αρκετά απλές εφαρμογές Python με το κακάο GUI του .. Μπορεί κανείς να ρίξει φως στο φρικτό έγγραφα ή σημείο μου σε μερικά σεμινάρια που όχι μόνο θα δώσει τεράστια μπλοκ του κώδικα και να αναλάβουν ξέρετε τι NSThread.detachNewThreadSelector\_toTarget\_withObject\_ ( "queryController", μόνος, None) κάνει ..; 
> 
> 
> [...]
> 
> 
> Βασικά το μόνο που θέλω να κάνετε είναι να γράψετε εφαρμογές για το κακάο, χωρίς να χρειάζεται να μάθουν ObjC.
> 
> 
> 


Αν και κατά βάση συμφωνώ με την απάντηση Soeren του, θα πάρει ακόμα περισσότερο:


Θα είναι ένα μεγάλο χρονικό διάστημα, αν όχι ποτέ, για να μπορέσετε να χρησιμοποιήσετε το κακάο χωρίς κάποια κατανόηση του στόχου Γ Κακάο δεν είναι μια αφηρημένη έννοια που χτίστηκε ανεξάρτητα από το στόχο C, είναι σαφώς συνδεδεμένη με αυτό. Μπορείτε να δείτε αυτό το παράδειγμα γραμμή κώδικα που αναφέρεται παραπάνω:



```
NSThread.detachNewThreadSelector_toTarget_withObject_("queryController", self, None) 

```

Αυτή είναι η Python τρόπος γραφής του στόχου γραμμή C:



```
[NSThread detachNewThreadSelector:@selector(queryController:) toTarget:self withObject:nil];

```

Τώρα, είναι σημαντικό να σημειωθεί εδώ ότι αυτή η γραμμή μπορεί να δει κανείς με δύο τρόπους: (1) ως γραμμή του στόχου C, ή (2) ως επίκληση των πλαισίων κακάο. Εμείς το βλέπουμε ως (1) από τη σύνταξη. Εμείς το βλέπουμε ως (2), αναγνωρίζοντας ότι NSThread είναι ένα πλαίσιο το κακάο το οποίο παρέχει μια σειρά από χρήσιμες λειτουργίες. Σε αυτή την περίπτωση, αυτό το συγκεκριμένο πλαίσιο κακάο καθιστά εύκολο για εμάς να έχουμε ένα αντικείμενο να αρχίσει να κάνει κάτι σε ένα νέο νήμα.


Αλλά το kicker είναι το εξής:. Το πλαίσιο κακάο εδώ (NSThread) μας παρέχει αυτό το πρακτικό υπηρεσίας με τρόπο που είναι σαφώς συνδεδεμένη με τη γλώσσα, το πλαίσιο έχει γραφτεί στο Δηλαδή, NSThread μας έδωσε μια δυνατότητα που αναφέρεται ρητά στην «επιλογείς» . Επιλογείς είναι, στην πραγματικότητα, το όνομα για κάτι θεμελιώδες για το πώς Στόχος λειτουργεί Γ.


Έτσι, υπάρχει το τρίψιμο. Κακάο είναι ουσιαστικά μια δημιουργία Objective-C, και οι δημιουργοί του έχουν κατασκευαστεί με Στόχος Γ στο μυαλό. Δεν είμαι ισχυριζόμενος ότι είναι αδύνατο να μεταφράσει το interface με το κακάο χαρακτηριστικά σε μια μορφή πιο φυσικό για άλλες γλώσσες. Είναι απλά ότι μόλις αλλάξει το πλαίσιο κακάο για να σταματήσουμε να αναφερόμαστε σε «επιλογείς», δεν είναι πραγματικά το πλαίσιο κακάο πια. Είναι μια μεταφρασμένη έκδοση. Και από τη στιγμή που θα αρχίσουν προς αυτή την κατεύθυνση, υποθέτω τα πράγματα γίνονται πολύ βρώμικο. Προσπαθείς να συμβαδίσει με την Apple όπως ενημερώσετε το κακάο, ίσως θα χτυπήσει κάποια μέρη του κακάο που απλά δεν μεταφράζεται και στη νέα γλώσσα, οτιδήποτε. Έτσι, αντί, τα πράγματα όπως PyObjC επιλέξουν να εκθέσει το κακάο άμεσα, με τρόπο που να έχει μια πολύ σαφή και απλή συσχέτιση. Όπως λένε στην τεκμηρίωση:



> 
> Για να έχουμε μια χωρίς απώλειες και ξεκάθαρη μετάφραση μεταξύ μηνυμάτων Objective-C και μεθόδους Python, το όνομα μέθοδος ισοδύναμο Python είναι απλά ο επιλογέας με άνω και κάτω τελείες αντικαθίσταται από υπογράμμισης.
> 
> 
> 


Σίγουρα, είναι λίγο άσχημο, και σημαίνει ότι θα πρέπει να ξέρετε κάτι για Objective-C, αλλά αυτό είναι επειδή η εναλλακτική λύση, αν υπάρχει πραγματικά, δεν είναι απαραίτητα καλύτερη.

 

Για να μιλήσουμε ξεκάθαρα:


Αν θέλετε να είναι ένα αποτελεσματικό προγραμματιστής κακάο, θα πρέπει να μάθουν Objective-C. Τέλος της ιστορίας.


Ούτε Python ή Ruby είναι ένα υποκατάστατο για τον στόχο-C μέσω των αντίστοιχων γεφυρών τους. Μπορείτε ακόμα να κατανοήσουν τα APIs Objective-C, οι συμπεριφορές εγγενείς NSObject παραγόμενες κλάσεις, και πολλές άλλες λεπτομέρειες του κακάο.


PyObjC και RubyCocoa είναι ένας πολύ καλός τρόπος για να αποκτήσετε πρόσβαση σε λειτουργίες Python ή Ruby από μια εφαρμογή κακάο, συμπεριλαμβανομένης της δημιουργίας μιας εφαρμογής για το κακάο ως επί το πλείστον - αν όχι αποκλειστικά - σε Python και Ruby. Αλλά η επιτυχία σ 'αυτό, στηρίζεται σε μια εις βάθος κατανόηση των Κακάο και τα APIs Objective-C που αποτελείται από.

 

Δεν ήξερα τίποτα για το Στόχο C ή κακάο (αλλά πολλά για την Python), αλλά είμαι τώρα γράφει ένα μάλλον πολύπλοκη εφαρμογή PyObjC. Πώς μπορώ να μάθω; Πήρα [Προγραμματισμός κακάο για OSX](http://rads.stackoverflow.com/amzn/click/0321503619) και πήγε όλο το βιβλίο (μια αρκετά γρήγορη διαδικασία) χρησιμοποιώντας PyObjC. Απλώς αγνοούν οτιδήποτε σχετικά με τη διαχείριση της μνήμης και θα λίγο πολύ είναι μια χαρά. Ο μόνος περιορισμός είναι ότι πολύ σπάνια θα πρέπει να χρησιμοποιήσετε ένα διακοσμητή, όπως endSheetMethod (στην πραγματικότητα νομίζω ότι αυτό είναι το μόνο που έχω χτυπήσει):



```
@PyObjcTools.AppHelper.endSheetMethod
def alertEnded_code_context_(self, alert, choice, context):
    pass

```
 

Ο κύριος λόγος για την έλλειψη τεκμηρίωσης για PyObjC είναι ότι υπάρχει ένας developer (μου), και όπως οι περισσότεροι προγραμματιστές δεν μου αρέσει ιδιαίτερα το γράψιμο τεκμηρίωσης. Επειδή PyObjC είναι ένα side project μου έχω την τάση να επικεντρώνονται στην εργασία σχετικά με τα χαρακτηριστικά και διορθώσεις, γιατί αυτό είναι το πιο ενδιαφέρον για μένα.


Ο καλύτερος τρόπος για να βελτιωθεί η τεκμηρίωση είναι να προσφερθούν εθελοντικά να βοηθήσει στην λίστα PyObjC-dev. 


Παρεμπιπτόντως: η λίστα ηλεκτρονικού ταχυδρομείου pythonmac-sig (βλέπε Google) είναι ένας πόρος εξαιρετική για να πάρει βοήθεια για την Python στο MacOSX (και όχι μόνο PyObjC).

 