Einfache Möglichkeit, um ein Bild auf dem Foto des Geräts innerhalb unserer Anwendung (oder geladen remote) zu speichern:
Kategorie 'Objective-C'
Sehr kurze Auszug: Aufnahme eines Bildes in der Foto-Album
NSURLConnection: Anwendungsbeispiel
NSURLConnection ermöglicht, eine Verbindung cotrollata zu einem Remote-Server auszuführen. Um es zu verwenden:
1 2 3 4 5 6 7 8 9 10 11 | / / Die Objekte aus, um eine NSURLConnection durchführen urlConnection; NSURLConnection * URLConnection; mutableData; NSMutableData mutableData *; / / ... urlString = @ "http://www.miodominio.com/documento.txt" ; NSString * urlString @ = "http://www.miodominio.com/documento.txt"; urlRequest = [ NSURLRequest requestWithURL : [ NSURL URLWithString : urlString ] ] ; NSURLRequest urlRequest * = [ NSURLRequest requestWithURL: [ NSURL URLWithString: urlString]]; / / Der Delegierte wird, um die Verbindung Staaten reagieren NSURLConnection alloc ] initWithRequest : urlRequest delegate : self ] ; URLConnection = [[ NSURLConnection alloc] initWithRequest: URLRequest Delegierter: self]; |
Hier sind die Delegierten Methoden, um den Status der Verbindung überprüfen:
[Cc_objc]
Sehr kurze Auszug: Objective-C, Selector aus NSString
Objective-C ist eine wunderbare Sprache, mit dem Sie erstaunliche Dinge tun können. Einer der interessantesten Aspekte ist seine dynamische Aufruf von Methoden (Nachrichten). Es ist möglich, und zwar, um die Adresse einer Nachricht von einer Zeichenkette zu erhalten.
Sehr kurze Auszug: UIWebView, und Anzeige von PDF-Dateien innerhalb
Die Aufgabe UIWebView für die Anzeige einer Vielzahl von Dateien verwendet werden. Zum Beispiel können Sie es verwenden, um anzuzeigen - wie auch QuickTime-Filme oder YouTube - PDF-oder HTML-Dateien in unserem eigenen Code.
NSString
NSString ist eine sehr mächtige Klasse, lassen Sie mich Ihnen einige der am häufigsten verwendeten Eigenschaften:
printf ()
1 2 |
Führen Sie die split ()
1 2 3 |
Konvertieren von String an Wert
1 2 3 | / / Konvertieren doubleString = @ "123" ; NSString * doubleString @ = "123"; [ doubleString doubleValue ] ; double-Wert = [doubleString doubleValue]; |
Innerhalb eines Strings
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | / / Substring searchString = @ "age" ; NSString * searchString = @ "Alter"; beginsTest = @ "Agencies" ; NSString * beginsTest @ = "Agenturen"; [ beginsTest rangeOfString : searchString NSRange prefixRange = [beginsTest rangeOfString: searchString NSAnchoredSearch | NSCaseInsensitiveSearch ) ] ; Optionen: (NSAnchoredSearch | NSCaseInsensitiveSearch)]; / / PrefixRange = {0, 3} endsTest = @ "BRICOLAGE" ; NSString * endsTest = @ "DIY"; [ endsTest rangeOfString : searchString NSRange suffixRange = [endsTest rangeOfString: searchString NSAnchoredSearch | NSCaseInsensitiveSearch | NSBackwardsSearch ) ] ; Optionen: (NSAnchoredSearch | NSCaseInsensitiveSearch | NSBackwardsSearch)]; / / SuffixRange = {6, 3} |
Sehr kurze Auszug: Komponieren E-Mails an einem iPhone, iPod oder iPad
Um eine E-Mail in iPhone / iPod komponieren fügen Sie einfach den Rahmen MessageUI . In unserem Controller zu geben die Einbeziehung des Rahmens und die Durchführung des Protokolls MFMailComposeViewControllerDelegate :
Objective-C-Klasse Methoden und Selbstbestimmung alloc
davanti al prototipo, tipo: Wenn wir definieren und verwenden Methoden (Nachrichten) unter Objective-C, sind wir oft mit dem merkwürdigen Syntax, die ein Schild zeigt konfrontiert - oder + vor dem Prototyp ein:
1 2 3 4 5 6 7 | / / In der Definition void ) mioMessaggio; - (Void) mioMessaggio; / / In ähnlicher Weise bei der Durchführung void ) mioMessaggio { - (Void) {mioMessaggio / / ... } |
Oder:
1 2 3 4 5 6 7 | / / In der Definition void ) mioMessaggio; + (Void) mioMessaggio; / / In ähnlicher Weise bei der Durchführung void ) mioMessaggio { + (Void) {mioMessaggio / / ... } |
Der Unterschied liegt in der Tatsache, dass die von dem Symbol definiert - Verfahren zur Instanz sind, und dann mit einem Objekt verknüpft. Die Methoden, durch das Symbol definiert + werden als Klassen-Methoden, da sie ohne Zuweisung durchgeführt werden können 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. Klassenmethoden werden ständig, wie wenn wir zu initialisieren oder ein beliebiges Objekt zuweisen verwendet:
1 | [ UIView alloc ] ; MyView UIView * = [UIView alloc]; |
Die Methode alloc ist ein klassisches Beispiel, das in allen Objekten und, wie vom Kodex hervorgeht, ist eine Klassenmethode als vor der Zuweisung des Objekts selbst beansprucht.
Klasse Methoden können in vielen Fällen sinnvoll, insbesondere dann, wenn wir unser Objekt zu erstellen, und wir wollen und initialisieren Sie es in weniger Codezeilen möglich. Stellen Sie sich ein Array in einer Menge von Objekten von uns definierten sammeln. Wir definieren unsere erste Objekt, das Schreiben des Codes auf einfachste Weise, ohne Verwendung von Klassen-Methoden:
1 2 3 4 5 6 7 8 9 10 | / / Definition der Schnittstelle in 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 wird im einfachsten Fall kann es nichts sein, oder:
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]; } |
Wann werden wir unser Objekt verwenden werde, würden wir Code wie folgt verwenden:
1 2 3 | [ myObject alloc ] ; myObject * obj = [myObject alloc]; "Mario" ; obj.name @ = "John"; "Rossi" ; obj.lastname @ = "Smith"; |
Wenn wir zu viele Objekte dieses Typs zu erstellen, 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. Es könnte den Code, indem Sie eine Schleife zu verbessern for oder mit Hilfe eines NSMutableArray als Objekte in unserem Verzeichnis hinzufügen. . Doch die Situation migliorebbe leicht, gelegentlich außerhalb des Eigentums Einstellungen bleiben name und lastname . Wäre dann spontan, zu starten, fügen Sie eine Methode - Objekt - initWithName , mit der Sie auf alle Einstellungen der Eigenschaften zu springen, semplificandoci Dinge ein wenig zu ermöglichen. Bei der Umsetzung 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; } Selbst zurückkehren; } |
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: @ "Mario" 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. Abbiammo dennoch Zeiger objA und objB , die für die Eintragung in das Array und den freien Speicher. Wir wünschen konnten wir direkt in die Erstellung eines Objekts in das Auffüllen der Array, mit autorelease , um Speicher frei, aber der Code immer noch nicht im Leerlauf laufen. Lassen Sie mich zu demonstrieren, wie das Problem mit einer Klasse-Methode zu lösen. Zunächst ersetzen wir unsere - (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 *) {Nachname myObject * Punkt; item = [ [ self alloc ] init ] ) { if (item = [[self alloc] init]) { / / Init item.name = name; item.lastname = Nachname; } item autorelease ] ; return [Artikel autorelease]; } |
Dabei haben wir eine Methode, die Klasse zuweist (in autorelase) und iniziallizza unser Thema, bevor Sie den Zeiger auf die Instanz haben. Der Code verwendet wird, ist dann:
1 2 3 4 |
Viel, viel besser ...
iPad: Griff Startbildschirme
Auf Apple iPhone und iPod wurden verwendet, um eine einzelne Image-Datei zu verwalten, um die Anwendung, die Datei zu laden Default.png . Auf Apple iPad erfordert jedoch die verschiedenen Management-dell'orientamente die Annahme mehrere Bilddateien, um sicherzustellen, sehen Sie den Startbildschirm all'orientamente für das Gerät korrigiert. Während der Start der Anwendung, da es für das iPhone hat, ist es nicht möglich, den Code für "Wunder" wie das Gerät orientierten nehmen. Zum Glück wurde es in das automatische Laden von speziellen Dateien von der Orientierung eingeführt:

Die Dateien werden unterstützt, zusätzlich zu den klassischen Default.png , dass Sie niemals verwenden, da es skaliert und Orientierung nach Anspruch verformt, sind:
- Standard-Portrait.png
- Standard-PortraitUpsideDown.png
- Standard-Landscape.png
- Standard-LandscapeLeft.png
- Standard-LandscapeRight.png
e LandscapeRight possono essere utilizzate per determinare orietamento e verso di quest'ultimo. Die Versionen PortraitUpsideDown , LandscapeLeft und LandscapeRight kann zur orietamento bestimmen und in Richtung der letzteren werden.
Für Anwendung gestartet wird, dann, wie von Apple empfohlen, ist es gut, "neu zu gestalten" - wo nötig - unsere Ansichten Handeln in application:didFinishLaunchingWithOptions .
Passen Sie die Abschnitte in einem UITableView gruppiert
potremmo aver necessità di personalizzare la grafica dei titoli delle sezioni, come California o New York dell'esempio qui sotto. Wenn wir einen nutzen UITableView Stil Grouped wir Möglicherweise müssen Sie das Layout der Abschnittsüberschriften, wie Kalifornien oder New York das Beispiel unten anpassen.

Dazu nutzen Sie bitte den folgenden Code, womit es in dem Delegierten, dh die Klasse, die dem Protokoll reagiert UITableViewDelegate :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | / / Ich mein benutzerdefinierte Ansicht in diesem Fall ein Objekt / / Typ UILabel UIView * ) tableView : ( UITableView * ) tableView - (UIView *) tableView: (UITableView *) tableView NSInteger ) section { viewForHeaderInSection: (NSInteger) section { [ [ [ UILabel alloc ] initWithFrame : CGRectZero ] autorelease ] ; UILabel * label = [[[UILabel alloc] initWithFrame: CGRectZero] autorelease]; UIFont boldSystemFontOfSize : 20 ] ; label.font = [UIFont boldSystemFontOfSize: 20]; label.textAlignment = UITextAlignmentCenter; UIColor blackColor ] ; label.shadowColor = [UIColor blackColor]; 1 , 1 ) ; label.shadowOffset CGSizeMake = (1, 1); "Sezione" ; // Sostituire con un array come al solito Label.Text @ = "Abschnitt", / / mit einem Array wie gewohnt Ersetzen UIColor whiteColor ] ; label.textColor = [UIColor WhiteColor]; UIColor clearColor ] ; label.backgroundColor = [UIColor clearColor]; ; label.opaque = NO; Rücksendeaufkleber; } / / Wir müssen uns auch unterstützen, diese Botschaft wird nicht funktionieren CGFloat ) tableView : ( UITableView * ) tableView - (CGFloat) tableView: (UITableView *) tableView NSInteger ) section { heightForHeaderInSection: (NSInteger) section { ; Rückkehr 44; } |
Es ist auch wichtig zu zählen heightForHeaderInSection , wird es nicht funktionieren.
Notes of Interest
o UIImageView , ho utilizzato per inizializzare il frame CGRectZero che corrisponde a CGRectMake(0,0,0,0) . In der Kreation unserer UILabel , dass der Wunsch könnte auch ein komplexeres Objekt wie eine UIView oder UIImageView , benutzte ich, um die Initialisierung frame CGRectZero dies entspricht CGRectMake(0,0,0,0) .
Wie man Breite und Länge in Objective-C
Die MapKit Framework bietet viele nützliche Funktionen, mit Ausnahme der Rückkehr der Breite und Länge 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 Breite und Länge von einer Adresse zu bekommen . Auf dem Apple iPhone oder iPad, können Sie jedoch das Hindernis durch Verwendung eines anderen Google-Services zu überwinden. Insbesondere können Sie direkt rufen Sie die URL:
1 | http://maps.google.com/maps/geo?q = [Adresse] & output = csv |
Wo ist [indirizzo] , um den String mit der Adresse, die Sie umwandeln möchten Koordinaten eingeben. Der Ausgang zurückgekehrt ist vom Typ:
1 | 200,8,41.9128300,12.2241172 |
). Der erste Wert, 200 , zeigt an, dass alles gut gegangen ist ( 200 OK ). Die zweite, 8 , ist das Google-Parameter Genauigkeit (1-10). Die letzten beiden Werte sind, endlich, Breiten-und Längengrad. Jetzt sehen wir, ein Prototyp für ein Verfahren in unseren Anwendungen einbezogen werden können:
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 ] ] ; [Adresse stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]]; listItems = [ locationString componentsSeparatedByString : @ "," ] ; NSArray * ListItems = [locationString componentsSeparatedByString: @ ""]; / / Int zoom = 0; 0.0 ; doppelte Breite = 0,0; 0.0 ; doppelte 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 ] ; Breitengrad = [[ListItems objectAtIndex: 2] doubleValue]; listItems objectAtIndex : 3 ] doubleValue ] ; Länge = [[ListItems objectAtIndex: 3] doubleValue]; { Else {} / / Fehler } CLLocationCoordinate2D Standort; location.latitude = Breite; location.longitude = Länge; Standort zurückkehren; } |
Notes of Interest
, alla stregua della funzione explode ( ) del PHP per intenderci. Die Zeichenfolge in zurückgekehrt locationString wird "gesplittet" nach der Methode componentsSeparatedByString , wie die Funktion explode ( ) von PHP zum Beispiel. Im Beispiel habe ich vorgeschlagen, trat ich - aber kommentiert - den Code, um auch die Google-Parameter Genauigkeit, Präzision oder Skalierungsfaktor, mit bezeichnet abrufen zoom .
Quelle als
Der Vollständigkeit halber, habe ich eine gemacht 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 anzuzeigen.
Ich danke dem Team devapp für die Inspiration dieses Artikels.








Neueste Kommentare
Gabriel : Hallo, interessanter Artikel. Ich bräuchte etwas ähnliches, aber mit einigen Änderungen. In einem ...
Sebastian : Great Aktien - vielen Dank!
Betreff : sehr hilfreich! Ich versuchte es und es ist genau das, was ich brauchte. Jetzt frage ich mich wie bekomme ich ...
Vik : Mit strategischer Hilfe!
Pfeffer : Hallo zusammen, ich weiß nicht, ob Sie einer der Schöpfer des WP-Plugin Bannerize sind. Ich habe ein gesichtet ...