Objective-C ist eine wunderbare Sprache, die Sie erstaunliche Dinge tun können. Einer der interessantesten Aspekte ist seine dynamische Aufruf von Methoden (Nachrichten). Sie können in der Tat bekommen die Adresse einer Nachricht aus einem String.
Artikel Tagged 'Objective-C'
Sehr kurze Auszug: Objective-C NSString von Selector
Sehr kurze Auszug: UIWebView, und Anzeigen von PDF-Dateien in
Das Objekt UIWebView können verwendet werden, um mehrere Dateien angezeigt werden. Zum Beispiel können Sie es verwenden, um anzuzeigen - sowie QuickTime-Filme oder YouTube - PDF oder HTML-Datei in unserem Code enthalten.
Sehr kurze Auszug: Verfassen von Mails in einer Anwendung iPhone, iPod oder iPad
So verfassen Mail in einer Anwendung iPhone / iPod, fügen Sie einfach den Rahmen MessageUI . In unserem Controller geben die Einbeziehung der Rahmen fest und passt die Protocolo MFMailComposeViewControllerDelegate :
Objective-C-Klasse Methoden und selbst alloc
davanti al prototipo, tipo: Wenn Sie definieren und verwenden Methoden (Nachrichten) unter Objective-C, sind wir oft mit dem merkwürdigen Syntax, die ein Zeichen zeigt konfrontiert - oder + vor dem Prototyp ein:
1 2 3 4 5 6 7 | / / In der Definition void ) mioMessaggio; - (Void) mioMessaggio; / / Auch in der Umsetzung void ) mioMessaggio { - (Void) {mioMessaggio / / ... } |
Oder:
1 2 3 4 5 6 7 | / / In der Definition void ) mioMessaggio; + (Void) mioMessaggio; / / Auch in der Umsetzung void ) mioMessaggio { + (Void) {mioMessaggio / / ... } |
Der Unterschied ist, dass die Methoden durch das Symbol definiert - Instanz-Methoden sind, dann zu einem Objekt verknüpft. Die Methoden, das Symbol definiert + werden als Klassen-Methoden, da sie ohne Zuordnung vorgenommen werden kann und instanziieren das Objekt in Frage.
sono due classi, molto usate, che contengono svariati metodi di classe. NSString oder UIView gibt zwei Klassen, weit verbreitet, die mehrere Klassen-Methoden enthalten. Class-Methoden werden kontinuierlich, wie wenn wir zu initialisieren oder zuzuordnen Objekt verwendet:
1 | [ UIView alloc ] ; MyView UIView * = [UIView alloc]; |
Die Methode alloc ist ein klassisches Beispiel, in allen Objekten und, wie sich aus dem Code wird eine Klasse Methode als vor der Zuweisung des Objekts selbst aufgerufen.
Klassenmethoden können in vielen Fällen sinnvoll, insbesondere dann, wenn wir unsere Objekt zu erstellen, und wir wollen und initialisieren Sie es in weniger Zeilen Code wie möglich. Stellen Sie sich eine Zahl in ein Array von Objekten von uns definierten sammeln. Wir definieren unser Objekt, vor allem das Schreiben des Codes auf einfachste Weise, ohne Klassen-Methoden:
1 2 3 4 5 6 7 8 9 10 | / / Definieren Sie die Schnittstelle myObject.h # Import <Foundation/Foundation.h> NSObject { @ Interface myObject: NSObject { name; NSString * name; lastname; NSString * Nachname; } nonatomic, retain ) NSString * name; @ Property (atomare, behalten) NSString * name; nonatomic, retain ) NSString * lastname; @ Property (atomare, behalten) NSString * Nachname; |
Die Umsetzung, die im einfachsten Fall könnte nichts entweder:
1 2 3 4 5 6 7 8 9 10 11 12 | / / MyObject.m # Import "myObject.h" @ Implementation myObject @ Synthesize Name, Nachname; void ) dealloc { - (Void) {dealloc ; [Name release]; ; [Nachname release]; ; [Super dealloc]; } |
Als wir zu unserem Objekt verwenden zu bekommen, verwenden wir einen Code wie folgt aus:
1 2 3 | [ myObject alloc ] ; myObject * obj = [myObject alloc]; "Mario" ; obj.name @ = "John"; "Rossi" ; obj.lastname @ = "Smith"; |
Wenn wir viele Objekte dieser Art zu schaffen, und legen Sie sie in einer wollte NSArray , wird die Situation ein wenig umständlich:
1 2 3 4 5 6 7 8 9 10 11 12 | [ myObject alloc ] ; objA * myObject = [myObject alloc]; "Mario" ; objA.name @ = "John"; "Rossi" ; objA.lastname @ = "Smith"; [ myObject alloc ] ; objB * myObject = [myObject alloc]; "Carlo" ; objB.name @ = "Charles"; "Bianchi" ; objB.lastname @ = "Smith"; elenco = [ NSArray arrayWithObjects : objA, objB, nil ] ; NSArray * list = [ NSArray arrayWithObjects: objA, objB, nil]; ; [ObjA release]; ; [ObjB release]; |
per aggiungere man mano gli oggetti nel nostro elenco. Sie könnten den Code, indem Sie eine Schleife zu verbessern for oder mit einem NSMutableArray als Objekte in unserem Verzeichnis hinzufügen. . Doch die Situation der migliorebbe wenig, wenn sie sich außerhalb des Eigentums Einstellungen bleiben name und lastname . Wäre dann spontan, zu starten, fügen Sie eine Methode - Objekt - initWithName , mit denen Sie die Einstellungen der Eigenschaften zu springen, vereinfacht die Dinge ein wenig wäre. In der Implementierung-Datei myObject.m hinzu:
1 2 3 4 5 6 7 | id ) initWithName : ( NSString * ) stringName lastname : ( NSString * ) stringLastname { - (Id) initWithName: ( NSString *) Stringname Nachname: ( NSString *) {stringLastname self = [ super init ] ) { if (self = [super init]) { self.name = Stringname; self.lastname = stringLastname; } Rückkehr Selbst; } |
Dabei haben wir die Situation verbessert, können sie nun schreiben:
1 2 3 4 5 6 7 | [ [ myObject alloc ] initWithName : @ "Mario" lastname : @ "Rossi" ] ; objA * myObject = [[myObject alloc] initWithName: @ "John" Nachname: @ "Smith"]; [ [ myObject alloc ] initWithName : @ "Carlo" lastname : @ "Bianchi" ] ; objB * myObject = [[myObject alloc] initWithName: @ "Charles" Nachname: @ "Smith"]; elenco = [ NSArray arrayWithObjects : objA, objB, nil ] ; NSArray * list = [ NSArray arrayWithObjects: objA, objB, nil]; ; [ObjA release]; ; [ObjB release]; |
, necessari per l'inserimento nell'array e liberare la memoria. Doch noch Zeiger objA und objB , die für die Einreise in das Array und den freien Speicher. Wishing wir konnten direkt in die Schaffung eines Objekts bevölkern das Array eingetragen werden, mit autorelease , um Speicher freizugeben, aber der Code immer noch nicht im Leerlauf. Lassen Sie mich zu demonstrieren, wie das Problem mit einer Klasse-Methode zu lösen. Zuerst ersetzen wir - (id)initWidthName mit:
1 2 3 4 5 6 7 8 9 10 | id ) initWithName : ( NSString * ) name lastname : ( NSString * ) lastname { + (Id) initWithName: ( NSString *) Name Nachname: ( NSString *) {lastname myObject * item; item = [ [ self alloc ] init ] ) { if (item = [[self alloc] init]) { / / Init item.name = name; item.lastname = Nachname; } item autorelease ] ; zurück [item autorelease]; } |
Dabei haben wir eine Klasse Methode, weist (in autorelase) und tatsächlich eingeleitet einem unserer Objekt, zuerst den Zeiger auf die Instanz haben. Der Code verwendet wird:
1 2 3 4 |
Viel, viel besser ...
WordPress Plugin Maker
Ich bin wirklich glücklich in der Lage sein, um eine Vorschau WordPress Plugin Maker, ein Programm für Mac OS X (Snow Leopard), die Sie zu einem Skelett einer statischen WordPress-Plugins in wenigen Sekunden erstellen können präsentieren, so dass Sie viele Parameter eingestellt werden. Die Anwendung ist noch in der Entwicklung, sondern macht seinen Job Basis und ist leicht bedienbar und funktional. Einige Funktionen sind noch nicht aufgenommen werden und der andere wartet auf Feedback von den "paar" lucky Beta-Tester.
Wie bekomme ich Längen-und Breitengrad in Objective-C
Das Framework stellt MapKit viele nützliche Funktionen, mit Ausnahme der Rückgabe von Längen-und Breitengrad von einer Adresse. In JavaScript, zum Beispiel, können Sie den Service von Google Geocoding zur Verfügung gestellt und diskutiert in Google Maps: Wie man Breitengrad und Längengrad von einer Adresse zu bekommen . Apple iPhone oder iPad, können Sie jedoch dieses Hindernis mit einem anderen Google-Services zu überwinden. Insbesondere können Sie direkt aufrufen, um den URL:
1 | http://maps.google.com/maps/geo?q = [Adresse] & output = csv |
Wo ist [indirizzo] , um den String mit der Adresse, die Sie wollen, um die Koordinaten zu transformieren geben. Die Ausgabe, ist vom Typ:
1 | 200,8,41.9128300,12.2241172 |
). Der erste Wert, 200 , zeigt, dass alles gut gegangen ist ( 200 OK ). Die zweite, 8 , ist Google die Richtigkeit Parameter (1-10). Die letzten beiden Werte sind schließlich Längen-und Breitengrad. Jetzt sehen wir einen Prototyp für ein Verfahren in unseren Anwendungen können enthalten sein:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | CLLocationCoordinate2D ) getLocationFromAddress : ( NSString * ) address { - (CLLocationCoordinate2D) getLocationFromAddress: ( NSString *) Adresse { urlString = [ NSString stringWithFormat : @ "http://maps.google.com/maps/geo?q=%@&output=csv" , NSString * urlString = [ NSString stringWithFormat: @ "% @ http://maps.google.com/maps/geo?q = & output = csv" NSUTF8StringEncoding ] ] ; [StringByAddingPercentEscapesUsingEncoding Adresse: NSUTF8StringEncoding]]; listItems = [ locationString componentsSeparatedByString : @ "," ] ; NSArray * ListItems = [locationString componentsSeparatedByString: @ ""]; / / Int zoom = 0; 0.0 ; Doppel-Breite = 0,0; 0.0 ; Doppel-Länge = 0,0; listItems count ] > = 4 && [ [ listItems objectAtIndex : 0 ] isEqualToString : @ "200" ] ) { if ([ListItems count]> = 4 & & [[ListItems objectAtIndex: 0] isEqualToString: @ "200"]) { / / Zoom = [[ListItems objectAtIndex: 1] intValue]; listItems objectAtIndex : 2 ] doubleValue ] ; Latitude = [[ListItems objectAtIndex: 2] doubleValue]; listItems objectAtIndex : 3 ] doubleValue ] ; Länge = [[ListItems objectAtIndex: 3] doubleValue]; { Else {} / / Fehler } CLLocationCoordinate2D location; location.latitude = Breite; location.longitude = Länge; Ort der Rückgabe ist; } |
Hinweise von Interesse
, alla stregua della funzione explode ( ) del PHP per intenderci. Der String zurückgegeben in locationString "split" wird durch das Verfahren componentsSeparatedByString , wie die Funktion explode ( ) in PHP zum Beispiel. Ich habe das Beispiel, das ich vorgeschlagen - aber bemerkte - der Code selbst die Google Genauigkeit Parameter, Genauigkeit oder Skalierungsfaktor, bezeichnen wir abrufen zoom .
Quelle als
Für Vollständigkeit, ich machte kleine Beispiel-Anwendung , mit der Sie die Methode oben vorgeschlagenen versuchen können, geben Sie eine beliebige Adresse und das iPhone wird auf der Karte zu zeigen.
Ich danke dem Team devapp für die Inspiration dieses Artikels.
setAnimationDidStopSelector: verschiedene Verwendungen und Fortgeschrittene
In den meisten Fällen, oder weil wir es gewohnt, oder weil wir haben in Tutorien gesehen und in einigen Texten, verwenden wir die setAnimationDidStopSelector auf diese Weise:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | nil context : NULL ] ; [UIView beginAnimations: nil context: NULL]; 1.5 ] ; [UIView setAnimationDuration: 1,5]; UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut]; self ] ; [UIView setAnimationDelegate: self]; @selector ( removeView ) ] ; [UIView setAnimationDidStopSelector: @ selector (removeView)]; ; myView.alpha = 0; ; [UIView commitAnimations]; / / void ) removeView { - (Void) {removeView ; [MyView removeFromSuperview]; } |
come delegato e tramite la setAnimationDidStopSelector gli invia un messaggio removeView quando l'animazione è terminata. In den obigen Code die setAnimationDelegate Satz self als Delegierter und durch setAnimationDidStopSelector sendet eine Nachricht removeView , wenn die Animation beendet ist. Der Code selbst ist richtig, aber nutzt eine Nachricht Definition ( removeView ), die weggelassen werden könnte. Nun, hier ist der gleiche Code, mit dem gleichen Effekt, ohne die Nachricht removeView :
1 2 3 4 5 6 7 8 9 | nil context : NULL ] ; [UIView beginAnimations: nil context: NULL]; 1.5 ] ; [UIView setAnimationDuration: 1,5]; UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut]; myView ] ; [UIView setAnimationDelegate: myView]; @selector ( removeFromSuperview ) ] ; [UIView setAnimationDidStopSelector: @ selector (removeFromSuperview)]; ; myView.alpha = 0; ; [UIView commitAnimations]; |
! Das Interessante an diesem Ansatz ist, dass myView könnte eine Unterklasse von werden UIView ! Es kann daher eine benutzerdefinierte Klasse mit eigenen Nachrichten und, wie gesagt, leicht aufrufbar sein setAnimationDidStopSelector . Darüber hinaus die setAnimationDidStopSelector einverstanden Selektoren mit den Parametern:
1 2 3 4 5 6 7 8 9 | nil context : NULL ] ; [UIView beginAnimations: nil context: NULL]; 1.5 ] ; [UIView setAnimationDuration: 1,5]; UIViewAnimationCurveEaseInOut ] ; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut]; myView ] ; [UIView setAnimationDelegate: myView]; @selector ( myMessage : param1 : ) ] ; [UIView setAnimationDidStopSelector: @ selector (myMessage: param1:)]; ; myView.alpha = 0; ; [UIView commitAnimations]; |
Dieses Beispiel auf alle Fälle hier, wo wir ein Delegierter erweitert werden kann, ist Atro nicht einen Zeiger auf eine Instanz eines Objekts.
Wie man Bilder und Ansichten in Interface Builder finden
Nach der Erläuterung , wie wir unsere Saiten in Xcode zu finden , ist es einfach, jetzt, wie zu sehen - durch die Anwendung der gleichen Technik - zu lokalisieren und Betrachtung von Bildern / interfaces mit Interface Builder erstellt.
Suchen Sie Graphik-Ressourcen
Der Prozess, wie erwähnt, ist die gleiche, wenn wir ein Bild bereits in unsere Ressourcen enthalten sind, oder sie setzen einen neuen ein, und wir wollen "locate" - das heißt, auf zwei oder mehr Bilder auf Basis der unterstützten Sprachen zu verwalten - klicken Sie einfach auf den Button Bild rechts ( Adium.png in diesem Beispiel), und wählen Sie Get Info:

Make File Localizable wir in der unteren linken Seite klicken.

Wir klicken Sie auf Hinzufügen und fügen Localization Italian :

Um zu erhalten:

esattamente come accadeva con il testo: Unser Bild bewegt wird (physisch, eines der seltenen Male, wenn das passiert nell'alberatura Xcode auf dem Dateisystem wird reflektiert) unter virtuellen Ordnern English.lproj und Italian.lproj genau wie mit dem Text passiert:

contiene una stessa versione dell'immagine. An dieser Stelle jeden der Ordner English.lproj und Italian.lproj enthält die gleiche Version des Bildes. Standardmäßig - - die englische Version Dieses Bild ist in Interface Builder, wo wir sehen, manipuliert.
An diesem Punkt einfach überschreiben einer (oder beide Dateien Adium.png ) zu einem Ort der Bilder "flash" erhalten.
Suchen Sie die Dateien XIB
Auch die Schnittstellen mit Interface Builder gebaut werden können in ihrer Gesamtheit entfernt werden, wenn es für notwendig erachtet wird. ) con interfaccia XIB , lo selezioniamo, scegliamo Get Info dal menu contestuale, rendiamo il file localizzabile, aggiungiamo la localizzazione in italiano: Das Verfahren ist identisch mit dem grafischen Fähigkeiten durchgeführt: Fügen Sie ein ViewController (zB infoViewController ) XIB-Schnittstelle, wählen wir sie, wählen Sie Get Info aus dem Kontextmenü, geben Sie der Datei lokalisierbar, fügen Sie die italienische Lokalisierung:

Klicken Italiano oder Italienisch öffnet Interface Builder! ) all'interno della classica cartella Classes . Dieses Mal das Dateisystem, werden Sie feststellen, dass Sie zwei Verzeichnisse (erstellt English.lproj und Italian.lproj ) innerhalb der klassischen Klassen-Ordner. Beide haben ihre Dateien infoViewController.xib . Der Komfort in diesem, deutlich in den Code behoben, und wann wir unsere Controller-Code instanziieren wir eine "saubere" wie diese haben:
1 2 | [ InfoViewController alloc ] ; InfoViewController * info = [InfoViewController alloc]; info.view ] ; [Self.view addSubview: info.view]; |
Wie Sie sehen können gibt es keine Spur von Aussage über die Lage, völlig vom System verwaltet. Die beiden Schnittstellen, natürlich, können ganz unterschiedlich sein, wie wirksam sind als zwei separate XIB-Datei.
Wie Sie Ihr eigenes Protokoll mit delegierten erstellen
Selbst in den einfachen Tutorial finden Sie die Verwendung von Protokollen. Es wird sicherlich für viele in Ihrer View-Controller zufällig ein Protokoll verwenden, verteilen, neben der Definition der Schnittstelle, eine Anweisung ähnlich:
1 2 3 | UIViewController <uiwebviewdelegate> { @ Interface myViewController: UIViewController {<uiwebviewdelegate> ... } |
Sehr kurze Auszug: Holen Sie sich die Ausgabe einer URL in Objective-C
Vielleicht sollte ich schreiben "Sehr sehr sehr kurze Schnipsel", jedoch ist eine ausgezeichnete und komfortable "Trick" zu zeigen, was ich bin. Ausführen der "zwei" Zeilen Code unten gezeigt, können Sie die Ausgabe eines beliebigen URL und manipulieren.








Neueste Kommentare
Simon : Es ärgert gestört wieder ein und verwenden, die Platz für diese Dinge ... aber es funktioniert nicht ...
Giovambattista Fazioli : @ Simon: Was könnte darauf zurückzuführen sein, die Syntax, die ich verwendet, die speziell für PHP 5 +,...
Simon : Ich habe versucht gestern Abend, alles in functions.php, okay, jquery Formulare und Tabs jQueryUI ihnen ...
Giovambattista Fazioli : @ Simon: Ich empfehle Reinigung zu einem Code wie in ein ...
Simon : @ Giovambattista Fazioli: Vielen Dank für Ihre Geduld, es ist alles klar ... jetzt fühle ich mich jetzt ...