iOS - Kurzanleitung

Gesamtübersicht

iOS, das zuvor als iPhone OS bezeichnet wurde, ist ein mobiles Betriebssystem, das von Apple Inc. entwickelt wurde. Die erste Veröffentlichung erfolgte 2007, einschließlich iPhone und iPod Touch. Das iPad (1. Generation) wurde im April 2010 und das iPad Mini im November 2012 veröffentlicht.

Die iOS-Geräte werden ziemlich häufig weiterentwickelt. Erfahrungsgemäß wird jedes Jahr mindestens eine Version von iPhone und iPad auf den Markt gebracht. Jetzt haben wir iphone5 gestartet, dessen Vorgänger von iPhone, iPhone 3gs, iPhone 4, iPhone 4s ausgehen. In ähnlicher Weise iPad wird von iPad (1 entwickelte st Generation) iPad (4 th Generation) und eine zusätzliche iPad Mini - Version.

Das iOS SDK wurde von 1.0 auf 6.0 weiterentwickelt. iOS 6.0, das neueste SDK, ist die einzige offiziell unterstützte Version in Xcode 4.5 und höher. Wir verfügen über eine umfangreiche Apple-Dokumentation und können anhand unseres Bereitstellungsziels herausfinden, welche Methoden und Bibliotheken verwendet werden können. In der aktuellen Version von Xcode können wir zwischen Bereitstellungszielen von iOS 4.3, 5.0 und 6.0 wählen.

Die Leistungsfähigkeit von iOS lässt sich anhand einiger der folgenden Funktionen spüren, die als Teil des Geräts bereitgestellt werden.

  • Maps
  • Siri
  • Facebook und Twitter
  • Multi-Touch
  • Accelerometer
  • GPS
  • High-End-Prozessor
  • Camera
  • Safari
  • Leistungsstarke APIs
  • Spielezentrum
  • In-App-Kauf
  • Reminders
  • Große Auswahl an Gesten

Die Anzahl der Benutzer, die iPhone / iPad verwenden, hat stark zugenommen. Dies bietet Entwicklern die Möglichkeit, Geld zu verdienen, indem sie Anwendungen für iPhone und iPad im App Store von Apple erstellen.

Für jemanden, der neu bei iOS ist, hat Apple einen Anwendungsspeicher entwickelt, in dem der Benutzer Apps kaufen kann, die für seine iOS-Geräte entwickelt wurden. Ein Entwickler kann sowohl kostenlose als auch kostenpflichtige Apps für den App Store erstellen. Um Anwendungen zu entwickeln und an den Store zu verteilen, muss sich der Entwickler beim iOS-Entwicklerprogramm registrieren, das 99 US-Dollar pro Jahr kostet, und einen Mac mit Mountain Lion oder höher für die Entwicklung mit dem neuesten Xcode.

Registrierung als Apple Developer

Eine Apple ID ist am wichtigsten, wenn Sie ein Apple-Gerät haben und Entwickler sind. Sie benötigen sie auf jeden Fall. Es ist kostenlos und daher keine Probleme, eine zu haben. Die Vorteile eines Apple-Kontos sind folgende:

  • Zugriff auf Entwicklungswerkzeuge.

  • Videos der Worldwide Developers Conference (WWDC).

  • Kann auf Einladung iOS-Entwicklerprogrammteams beitreten.

Führen Sie die folgenden Schritte aus, um ein Apple-Konto zu registrieren:

Step 1 - Klicken Sie auf den Link https://developer.apple.com/programs/register/ und wählen Sie "Apple ID erstellen"

Step 2 - Geben Sie die erforderlichen Informationen an, die auf der Seite selbsterklärend sind.

Step 3 - Überprüfen Sie Ihr Konto mit Ihrer E-Mail-Bestätigung und das Konto wird aktiv.

Step 4 - Jetzt können Sie die Entwicklertools wie Xcode, das mit iOS-Simulator und iOS SDK geliefert wird, sowie andere Entwicklerressourcen herunterladen.

Apple iOS Entwicklerprogramm

Die erste Frage, die sich einem neuen Entwickler stellen würde, lautet: Warum sollte ich mich für ein iOS-Entwicklerprogramm registrieren? Die Antwort ist ganz einfach; Apple konzentriert sich immer darauf, seinen Benutzern hochwertige Anwendungen bereitzustellen. Wenn keine Registrierungsgebühr erhoben wird, besteht die Möglichkeit, dass Junk-Apps hochgeladen werden, die Probleme für das App-Überprüfungsteam von Apple verursachen können.

Die Teilnahme am iOS-Entwicklerprogramm bietet folgende Vorteile:

  • Führen Sie die von Ihnen entwickelten Apps auf dem realen iOS-Gerät aus.

  • Verteilen Sie die Apps an den App Store.

  • Erhalten Sie Zugriff auf die Entwicklervorschauen.

Die Schritte zum Beitritt zum iOS-Entwicklerprogramm lauten wie folgt:

Step 1- Um sich zu registrieren, klicken Sie auf den Link - (https://developer.apple.com/programs/ios/).

Step 2 - Klicken Sie auf der angezeigten Seite auf Jetzt registrieren.

Step 3 - Sie können sich entweder bei Ihrem vorhandenen Apple-Konto anmelden (falls vorhanden) oder eine neue Apple-ID erstellen.

Step 4- Danach müssen Sie zwischen Einzel- und Firmenkonten wählen. Verwenden Sie das Unternehmenskonto, wenn sich mehr als ein Entwickler in Ihrem Team befindet. In einem einzelnen Konto können Sie keine Mitglieder hinzufügen.

Step 5 - Nach Eingabe der persönlichen Daten (für diejenigen, die sich neu registrieren) können Sie das Programm kaufen und aktivieren, indem Sie mit Hilfe Ihrer Kreditkarte bezahlen (nur akzeptierte Zahlungsweise).

Step 6 - Jetzt erhalten Sie Zugriff auf Entwicklerressourcen, indem Sie auf der Seite die Option Member Center auswählen.

Step 7 - Hier können Sie Folgendes tun:

  • Erstellen Sie Bereitstellungsprofile.

  • Verwalten Sie Ihr Team und Ihre Geräte.

  • Verwalten der Anwendung zum App Store über iTunes Connect.

  • Holen Sie sich Forum und technischen Support.

iOS - Xcode Installation

Step 1 - Laden Sie die neueste Version von Xcode von herunter https://developer.apple.com/downloads/

Step 2 - Doppelklicken Sie auf die Xcode-DMG-Datei.

Step 3 - Sie finden ein Gerät montiert und geöffnet.

Step 4 - Das angezeigte Fenster enthält zwei Elemente, nämlich die Xcode-Anwendung und die Verknüpfung des Anwendungsordners.

Step 5 - Ziehen Sie den Xcode in die Anwendung und er wird in Ihre Anwendungen kopiert.

Step 6 - Jetzt ist Xcode als Teil anderer Anwendungen verfügbar, aus denen Sie auswählen und ausführen können.

Sie haben auch eine andere Möglichkeit, Xcode aus dem Mac App Store herunterzuladen und anschließend gemäß den auf dem Bildschirm angegebenen schrittweisen Anweisungen zu installieren.

Interface Builder

Der Interface Builder ist das Tool, mit dem die Benutzeroberfläche einfach erstellt werden kann. Sie verfügen über eine Vielzahl von UI-Elementen, die für die Verwendung entwickelt wurden. Sie müssen nur per Drag & Drop in Ihre UI-Ansicht ziehen. Auf den nächsten Seiten erfahren Sie, wie Sie UI-Elemente hinzufügen, Outlets und Aktionen für die UI-Elemente erstellen.

Rechts unten befindet sich eine Objektbibliothek, die das gesamte erforderliche UI-Element enthält. Die Benutzeroberfläche wird häufig als bezeichnetxibs, das ist seine Dateierweiterung. Jedes der xibs ist mit einem entsprechenden View Controller verknüpft.

iOS Simulator

Ein iOS-Simulator besteht tatsächlich aus zwei Arten von Geräten, nämlich iPhone und iPad mit ihren unterschiedlichen Versionen. Zu den iPhone-Versionen gehören iPhone (normal), iPhone Retina und iPhone 5. Das iPad verfügt über ein iPad und ein iPad Retina. Ein Screenshot eines iPhone-Simulators wird unten angezeigt.

Sie können den Standort in einem iOS-Simulator simulieren, um mit den Längen- und Breitengradeffekten der App herumzuspielen. Sie können auch die Speicherwarnung und den Anrufstatus im Simulator simulieren. Sie können den Simulator für die meisten Zwecke verwenden, jedoch keine Gerätefunktionen wie den Beschleunigungsmesser testen. Daher benötigen Sie möglicherweise immer ein iOS-Gerät, um alle Szenarien einer Anwendung gründlich zu testen.

Die in der iOS-Entwicklung verwendete Sprache ist Ziel C. Sie ist eine objektorientierte Sprache und daher für diejenigen, die über Kenntnisse in objektorientierten Programmiersprachen verfügen, einfach.

Schnittstelle und Implementierung

In Ziel C heißt die Datei, in der die Deklaration der Klasse erfolgt, die interface file und die Datei, in der die Klasse definiert ist, heißt die implementation file.

Eine einfache Schnittstellendatei MyClass.h würde wie folgt aussehen -

@interface MyClass:NSObject { 
   // class variable declared here
}

// class properties declared here
// class methods and instance methods declared here
@end

Die Implementierungsdatei MyClass.m wäre wie folgt -

@implementation MyClass
   // class methods defined here
@end

Objekterstellung

Die Objekterstellung erfolgt wie folgt:

MyClass  *objectName = [[MyClass alloc]init] ;

Methoden

Die Methode wird in Ziel C wie folgt deklariert:

-(returnType)methodName:(typeName) variable1 :(typeName)variable2;

Ein Beispiel ist unten gezeigt.

-(void)calculateAreaForRectangleWithLength:(CGfloat)length 
andBreadth:(CGfloat)breadth;

Sie fragen sich vielleicht, was die andBreadthZeichenfolge ist für; Tatsächlich ist es eine optionale Zeichenfolge, die uns hilft, die Methode leicht zu lesen und zu verstehen, insbesondere zum Zeitpunkt des Aufrufs. Um diese Methode in derselben Klasse aufzurufen, verwenden wir die folgende Anweisung:

[self calculateAreaForRectangleWithLength:30 andBreadth:20];

Wie oben erwähnt, hilft uns die Verwendung von andBreadth zu verstehen, dass die Breite 20 beträgt. Self wird verwendet, um anzugeben, dass es sich um eine Klassenmethode handelt.

Klassenmethoden

Auf Klassenmethoden kann direkt zugegriffen werden, ohne Objekte für die Klasse zu erstellen. Ihnen sind keine Variablen und Objekte zugeordnet. Ein Beispiel ist unten gezeigt.

+(void)simpleClassMethod;

Der Zugriff erfolgt über den Klassennamen (nehmen wir den Klassennamen als MyClass an) wie folgt:

[MyClass simpleClassMethod];

Instanzmethoden

Auf Instanzmethoden kann erst zugegriffen werden, nachdem ein Objekt für die Klasse erstellt wurde. Den Instanzvariablen wird Speicher zugewiesen. Eine beispielhafte Instanzmethode ist unten dargestellt.

-(void)simpleInstanceMethod;

Nach dem Erstellen eines Objekts für die Klasse kann wie folgt darauf zugegriffen werden:

MyClass  *objectName = [[MyClass alloc]init] ;
[objectName simpleInstanceMethod];

Wichtige Datentypen in Ziel C.

Sr.Nr. Datentyp
1

NSString

Es wird zur Darstellung einer Zeichenfolge verwendet.

2

CGfloat

Es wird zur Darstellung eines Gleitkommawertes verwendet (normales Gleitkommawert ist ebenfalls zulässig, es ist jedoch besser, CGfloat zu verwenden).

3

NSInteger

Es wird zur Darstellung von Ganzzahlen verwendet.

4

BOOL

Es wird zur Darstellung von Booleschen Werten verwendet (JA oder NEIN sind zulässige BOOL-Typen).

Protokolle drucken

NSLog - wird zum Drucken einer Anweisung verwendet. Es wird in den Geräteprotokollen und in der Debug-Konsole im Release- bzw. Debug-Modus gedruckt. Zum Beispiel,

NSlog(@"");

Kontrollstrukturen

Die meisten Kontrollstrukturen sind dieselben wie in C und C ++, mit Ausnahme einiger Ergänzungen wie in Anweisung.

Eigenschaften

Damit eine externe Klasse auf die Klasse zugreifen kann, werden variable Eigenschaften verwendet. Zum Beispiel,

@property(nonatomic , strong) NSString *myString;

Zugriff auf Eigenschaften

Sie können den Punktoperator verwenden, um auf Eigenschaften zuzugreifen. Um auf die oben genannte Eigenschaft zuzugreifen, gehen wir wie folgt vor.

self.myString = @"Test";

Sie können die Set-Methode auch wie folgt verwenden:

[self setMyString:@"Test"];

Kategorien

Kategorien werden verwendet, um Methoden zu den vorhandenen Klassen hinzuzufügen. Auf diese Weise können wir Klassen Methoden hinzufügen, für die wir nicht einmal Implementierungsdateien haben, in denen die eigentliche Klasse definiert ist. Eine Beispielkategorie für unsere Klasse lautet wie folgt:

@interface MyClass(customAdditions)
- (void)sampleCategoryMethod;
@end

@implementation MyClass(categoryAdditions)

-(void)sampleCategoryMethod {
   NSLog(@"Just a test category");
}

Arrays

NSMutableArray und NSArray sind die in Ziel C verwendeten Array-Klassen. Wie der Name schon sagt, ist die erstere veränderlich und die letztere unveränderlich. Ein Beispiel ist unten gezeigt.

NSMutableArray *aMutableArray = [[NSMutableArray alloc]init];
[anArray addObject:@"firstobject"];
NSArray *aImmutableArray = [[NSArray alloc]
initWithObjects:@"firstObject",nil];

Wörterbuch

NSMutableDictionary und NSDictionary sind die in Ziel C verwendeten Wörterbuchklassen. Wie der Name schon sagt, ist die erstere veränderlich und die letztere unveränderlich. Ein Beispiel ist unten gezeigt.

NSMutableDictionary *aMutableDictionary = [[NSMutableArray alloc]init];
[aMutableDictionary setObject:@"firstobject" forKey:@"aKey"];
NSDictionary*aImmutableDictionary= [[NSDictionary alloc]initWithObjects:[NSArray arrayWithObjects:
@"firstObject",nil] forKeys:[ NSArray arrayWithObjects:@"aKey"]];

Erste App erstellen

Jetzt erstellen wir eine einfache Einzelansicht-Anwendung (eine leere App), die auf dem iOS-Simulator ausgeführt wird.

Die Schritte sind wie folgt.

Step 1 - Öffnen Sie Xcode und wählen Sie Create a new Xcode project.

Step 2 - Wählen Sie Single View Application.

Step 3 - Geben Sie den Produktnamen ein, dh den Namen der Anwendung, den Organisationsnamen und dann die Firmenkennung.

Step 4 - Stellen Sie das sicher Use Automatic Reference Countingwird ausgewählt, um die zugewiesenen Ressourcen automatisch freizugeben, sobald sie den Gültigkeitsbereich verlassen. Weiter klicken.

Step 5 - Wählen Sie das Verzeichnis für das Projekt und dann Erstellen.

Step 6 - Sie sehen einen Bildschirm wie folgt -

Im obigen Bildschirm können Sie die unterstützten Ausrichtungen, Build- und Release-Einstellungen auswählen. Es gibt ein Feldbereitstellungsziel, die Geräteversion, von der wir unterstützen möchten. Wählen Sie 4.3 aus. Dies ist das derzeit minimal zulässige Bereitstellungsziel. Im Moment sind diese nicht erforderlich und wir konzentrieren uns auf die Ausführung der Anwendung.

Step 7 - Wählen Sie nun in der Dropdown-Liste neben der Schaltfläche "Ausführen" den iPhone-Simulator aus und wählen Sie "Ausführen".

Step 8- Das war's; Sie haben Ihre erste Anwendung erfolgreich ausgeführt. Sie erhalten eine Ausgabe wie folgt:

Ändern wir nun die Hintergrundfarbe, um mit dem Interface Builder zu beginnen. Wählen Sie ViewController.xib. Wählen Sie rechts die Hintergrundoption, ändern Sie die Farbe und führen Sie sie aus.

Im obigen Projekt wurde das Bereitstellungsziel standardmäßig auf iOS 6.0 festgelegt, und das automatische Layout wird aktiviert. Um sicherzustellen, dass unsere Anwendung auf Geräten mit iOS 4.3 ausgeführt wird, haben wir das Bereitstellungsziel bereits zu Beginn der Erstellung dieser Anwendung geändert, das automatische Layout jedoch nicht deaktiviert.

Um das automatische Layout zu deaktivieren, müssen Sie das Kontrollkästchen für das automatische Layout im Dateiinspektor jeder Feder, dh der xib-Dateien, deaktivieren. Die verschiedenen Abschnitte der Xcode-Projekt-IDE sind in der folgenden Abbildung dargestellt (mit freundlicher Genehmigung: Apple Xcode 4-Benutzerdokumentation).

Der Dateiinspektor befindet sich wie oben gezeigt in der Inspektorauswahlleiste, und das automatische Layout kann dort deaktiviert werden. Das automatische Layout kann verwendet werden, wenn Sie nur auf iOS 6-Geräte abzielen möchten. Außerdem können Sie viele neue Funktionen wie Sparbuch verwenden, wenn Sie das Bereitstellungsziel auf iOS 6 erhöhen. Halten wir uns zunächst an iOS 4.3 als Bereitstellungsziel.

Code der ersten iOS-Anwendung

Sie finden fünf verschiedene Dateien, die für Ihre Anwendung generiert worden wären. Sie sind wie folgt aufgeführt:

  • AppDelegate.h
  • AppDelegate.m
  • ViewController.h
  • ViewController.m
  • ViewController.xib

AppDelegate.h

// Header File that provides all UI related items. 
#import <UIKit/UIKit.h> 

// Forward declaration (Used when class will be defined /imported in future)
@class ViewController;  

// Interface for Appdelegate
@interface AppDelegate : UIResponder <UIApplicationDelegate>

// Property window 
@property (strong, nonatomic) UIWindow *window; 

// Property Viewcontroller

@property (strong, nonatomic) ViewController *viewController;
//this marks end of interface 
@end

Important items in code - -

  • AppDelegate erbt von UIResponder, der iOS-Ereignisse verarbeitet.

  • Implementiert die Delegatmethoden von UIApplicationDelegate, die wichtige Anwendungsereignisse wie den abgeschlossenen Start, das Beenden usw. bereitstellen.

  • UIWindow-Objekt zum Verwalten und Koordinieren der verschiedenen Ansichten auf dem Bildschirm des iOS-Geräts. Es ist wie die Basisansicht, über die alle anderen Ansichten geladen werden. Im Allgemeinen gibt es nur ein Fenster für eine Anwendung.

  • UIViewController für den Bildschirmfluss.

AppDelegate.m

// Imports the class Appdelegate's interface
import "AppDelegate.h" 

// Imports the viewcontroller to be loaded
#import "ViewController.h" 

// Class definition starts here
@implementation AppDelegate 


// Method to intimate us that the application launched successfully
- (BOOL)application:(UIApplication *)application 
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
   self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
   
   // Override point for customization after application launch.
   self.viewController = [[ViewController alloc]
   initWithNibName:@"ViewController" bundle:nil];
   self.window.rootViewController = self.viewController;
   [self.window makeKeyAndVisible];
   return YES;
}

- (void)applicationWillResignActive:(UIApplication *)application {
   /* Use this method to release shared resources, save user data,
   invalidate timers, and store enough application state information
   to restore your application to its current state in case it is 
   terminated later. If your application supports background 
   execution, this method is called instead of
   applicationWillTerminate: when the user quits.*/
}

- (void)applicationWillEnterForeground:(UIApplication *)application {
   /* Called as part of the transition from the background to the 
   inactive state. Here you can undo many of the changes made on 
   entering the background.*/
}

- (void)applicationDidBecomeActive:(UIApplication *)application {
   /* Restart any tasks that were paused (or not yet started) while 
   the application was inactive. If the application was previously in 
   the background, optionally refresh the user interface.*/
}

- (void)applicationWillTerminate:(UIApplication *)application {
   /* Called when the application is about to terminate. Save data if 
   appropriate. See also applicationDidEnterBackground:. */
}

- (void)applicationWillTerminate:(UIApplication *)application {
   /* Called when the application is about to terminate. Save data if appropriate.
   See also applicationDidEnterBackground:. */
}
@end

Important items in code - -

  • Hier werden UIApplication-Delegaten definiert. Alle oben definierten Methoden sind UI-Anwendungsdelegierte und enthalten keine benutzerdefinierten Methoden.

  • Das UIWindow-Objekt wird zugewiesen, um die zugewiesene Anwendung zu halten.

  • UIViewController wird als anfänglicher Ansichtscontroller des Fensters zugewiesen.

  • Um das Fenster sichtbar zu machen, wird die Methode makeKeyAndVisible aufgerufen.

ViewController.h

#import <UIKit/UIKit.h> 

// Interface for class ViewController
@interface ViewController : UIViewController 

@end

Important items in code - -

  • Die ViewController-Klasse erbt den UIViewController, der das grundlegende Ansichtsverwaltungsmodell für die iOS-Anwendungen bereitstellt.

ViewController.m

#import "ViewController.h"

// Category, an extension of ViewController class
@interface ViewController ()

@end

@implementation ViewController  

- (void)viewDidLoad {
   [super viewDidLoad];
   // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning {
   [super didReceiveMemoryWarning];
   // Dispose of any resources that can be recreated.
}
@end

Important items in code - -

  • In der Basisklasse UIViewController sind zwei hier implementierte Methoden definiert.

  • Führen Sie die Ersteinrichtung in viewDidLoad durch, die nach dem Laden der Ansicht aufgerufen wird.

  • Die didReceiveMemoryWarning-Methode wird im Falle einer Speicherwarnung aufgerufen.

Aktionen und Outlets in iOS werden als bezeichnet ibActions und ibOutlets jeweils wo ibsteht für Interface Builder. Diese beziehen sich auf die UI-Elemente und werden untersucht, nachdem wir visuell wissen, wie sie implementiert werden.

Aktionen und Outlets - Beteiligte Schritte

Step 1 - Verwenden wir unsere erste iPhone-Anwendung.

Step 2 - Wählen Sie die Datei ViewController.xib aus den Dateien im Navigatorbereich aus.

Step 3 - Jetzt können Sie die UI-Elemente aus dem Bibliotheksbereich auf der rechten Seite unseres Fensters auswählen, der unten gezeigt wird.

Step 4 - Sie können die UI-Elemente per Drag & Drop in unsere Ansicht in unserem Interface Builder ziehen.

Step 5 - Fügen wir unserer Ansicht einen Label- und einen Round Rect-Button hinzu.

Step 6 - Über die Schaltfläche Editorauswahl in der Arbeitsbereich-Symbolleiste in der oberen rechten Ecke (siehe unten).

Wählen Sie die Schaltfläche Assistent Editor.

Step 7 - Wir sehen zwei Fenster in unserem Editorbereich in der Mitte, eines ist die Datei ViewController.xib und das andere ist ViewController.h.

Step 8 - Klicken Sie nun mit der rechten Maustaste auf das Etikett und wählen, halten und ziehen Sie den neuen Referenzausgang wie unten gezeigt.

Step 9- Legen Sie ViewController.h zwischen die geschweiften Klammern. Falls die Datei keine geschweiften Klammern enthält, fügen Sie vorher den ViewController hinzu. Sie finden ein Popup wie unten gezeigt.

Step 10- Geben Sie den Labelnamen für die Steckdose ein, hier haben wir das Label myTitleLabel verwendet. Klicken Sie auf Verbinden und das ibOutlet ist abgeschlossen.

Step 11 - Um eine Aktion hinzuzufügen, klicken Sie mit der rechten Maustaste auf die Schaltfläche "Richtig korrigieren", wählen Sie "Nachbessern" und ziehen Sie sie unter die geschweiften Klammern.

Step 12 - Löschen Sie es und nennen Sie es setTitleLabel.

Step 13 - Wählen Sie die Datei ViewController.m aus. Dort finden Sie eine Methode wie unten gezeigt.

-(IBAction) setTitleLabel:(id)sender {
}

Step 14 - Fügen Sie innerhalb der obigen Methode eine Anweisung wie unten gezeigt hinzu.

[myTitleLabel setText:@"Hello"];

Step 15- Lassen Sie uns nun das Programm ausführen, indem Sie auf die Schaltfläche Ausführen klicken. Sie sehen die folgende Ausgabe.

Step 16 - Klicken Sie nun auf die Schaltfläche.

Step 17 - Die von uns erstellte Bezeichnung wurde durch die Aktion auf der Schaltfläche geändert.

Step 18- Aus dem obigen Beispiel können wir schließen, dass IBOutlet einen Verweis auf das UIElement erstellt (hier für das UILabel). In ähnlicher Weise verknüpft die IBAction den UIButton mit einer Methode, die beim Ausbessern des Ereignisses im Inneren aufgerufen wird.

Step 19 - Sie können mit Aktionen herumspielen, indem Sie beim Erstellen der Aktion verschiedene Ereignisse auswählen.

Beispiel für Delegieren

Nehmen wir an, ein Objekt A ruft ein Objekt B auf, um eine Aktion auszuführen. Sobald die Aktion abgeschlossen ist, sollte Objekt A wissen, dass B die Aufgabe abgeschlossen hat, und die erforderlichen Maßnahmen ergreifen. Dies wird mit Hilfe von Delegierten erreicht.

Die Schlüsselkonzepte im obigen Beispiel sind -

  • A ist ein delegiertes Objekt von B.

  • B wird eine Referenz von A haben.

  • A implementiert die Delegatenmethoden von B.

  • B benachrichtigt A über die Delegatmethoden.

Schritte zum Erstellen eines Delegaten

Step 1 - Erstellen Sie zunächst eine Einzelansichtsanwendung.

Step 2 - Wählen Sie dann Datei → Neu → Datei ...

Step 3 - Wählen Sie dann Objective C Class aus und klicken Sie auf Next.

Step 4 - Geben Sie der Klasse einen Namen, z. B. SampleProtocol mit der Unterklasse NSObject (siehe unten).

Step 5 - Wählen Sie dann erstellen.

Step 6 - Fügen Sie der Datei SampleProtocol.h ein Protokoll hinzu, und der aktualisierte Code lautet wie folgt: -

#import <Foundation/Foundation.h>

// Protocol definition starts here 
@protocol SampleProtocolDelegate <NSObject>
@required
- (void) processCompleted;
@end

// Protocol Definition ends here
@interface SampleProtocol : NSObject {
   // Delegate to respond back
   id <SampleProtocolDelegate> _delegate; 
}
@property (nonatomic,strong) id delegate;

-(void)startSampleProcess; // Instance method
@end

Step 7 - Implementieren Sie die Instanzmethode, indem Sie die Datei SampleProtocol.m wie unten gezeigt aktualisieren.

#import "SampleProtocol.h"

@implementation SampleProtocol

-(void)startSampleProcess {
   [NSTimer scheduledTimerWithTimeInterval:3.0 target:self.delegate 
	selector:@selector(processCompleted) userInfo:nil repeats:NO];
}
@end

Step 8 - Fügen Sie ein UILabel in die ViewController.xib ein, indem Sie das Label wie unten gezeigt aus der Objektbibliothek nach UIView ziehen.

Step 9 - Erstellen Sie ein IBOutlet für das Label, benennen Sie es als myLabel und aktualisieren Sie den Code wie folgt, um SampleProtocolDelegate in ViewController.h zu übernehmen.

#import <UIKit/UIKit.h>
#import "SampleProtocol.h"

@interface ViewController : UIViewController<SampleProtocolDelegate> {
   IBOutlet UILabel *myLabel;
}
@end

Step 10Implementieren Sie die Delegate-Methode, erstellen Sie ein Objekt für SampleProtocol und rufen Sie die startSampleProcess-Methode auf. Die aktualisierte Datei ViewController.m lautet wie folgt:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
   [super viewDidLoad];
   SampleProtocol *sampleProtocol = [[SampleProtocol alloc]init];
   sampleProtocol.delegate = self;
   [myLabel setText:@"Processing..."];
   [sampleProtocol startSampleProcess];
   // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning {
   [super didReceiveMemoryWarning];
   // Dispose of any resources that can be recreated.
}

#pragma mark - Sample protocol delegate
-(void)processCompleted {
   [myLabel setText:@"Process Completed"];
}
@end

Step 11Wir werden eine Ausgabe wie folgt sehen. Anfangs zeigt das Label "Verarbeitung ..." an, das aktualisiert wird, sobald die Delegate-Methode vom SampleProtocol-Objekt aufgerufen wird.

Was sind UI-Elemente?

UI-Elemente sind die visuellen Elemente, die wir in unseren Anwendungen sehen können. Einige dieser Elemente reagieren auf Benutzerinteraktionen wie Schaltflächen, Textfelder, andere sind informativ wie Bilder und Beschriftungen.

Wie füge ich UI-Elemente hinzu?

Wir können UI-Elemente sowohl im Code als auch mit Hilfe des Interface Builder hinzufügen. Je nach Bedarf können wir einen von ihnen verwenden.

Unser Fokus

Wir werden uns mehr auf das Hinzufügen von UI-Elementen durch Code in unseren Anwendungen konzentrieren. Die Verwendung des Interface Builder ist einfach und unkompliziert. Wir müssen nur die UI-Elemente ziehen und ablegen.

Unser Vorgehen

Wir werden eine einfache iOS-Anwendung erstellen und sie zur Erläuterung einiger Elemente der Benutzeroberfläche verwenden.

Step 1 - Erstellen Sie eine Viewbased-Anwendung wie in unserer ersten iOS-Anwendung.

Step 2 - Wir werden nur die Dateien ViewController.h und ViewController.m aktualisieren.

Step 3 - Anschließend fügen wir unserer ViewController.m-Datei eine Methode zum Erstellen des UI-Elements hinzu.

Step 4 - Wir werden diese Methode in unserer viewDidLoad-Methode aufrufen.

Step 5 - Die wichtigen Codezeilen wurden im Code mit einem einzeiligen Kommentar über diesen Zeilen erläutert.

Liste der UI-Elemente

UI-spezifische Elemente und die damit verbundenen Funktionen werden nachfolgend erläutert.

Sr.Nr. UI-spezifische Elemente
1 Textfelder

Es ist ein UI-Element, mit dem die App Benutzereingaben abrufen kann.

2 Eingabetypen - TextFields

Wir können die Art der Eingabe festlegen, die der Benutzer mithilfe der Tastatureigenschaft von UITextField geben kann.

3 Tasten

Es wird zur Behandlung von Benutzeraktionen verwendet.

4 Etikette

Es wird zur Anzeige statischer Inhalte verwendet.

5 Symbolleiste

Es wird verwendet, wenn wir etwas basierend auf unserer aktuellen Ansicht manipulieren möchten.

6 Statusleiste

Es zeigt die wichtigsten Informationen des Geräts an.

7 Navigationsleiste

Es enthält die Navigationstasten eines Navigationscontrollers, bei dem es sich um einen Stapel von Ansichtscontrollern handelt, die gedrückt und geöffnet werden können.

8 Tab-Leiste

Es wird im Allgemeinen verwendet, um zwischen verschiedenen Unteraufgaben, Ansichten oder Modellen innerhalb derselben Ansicht zu wechseln.

9 Bildansicht

Es wird verwendet, um ein einfaches Bild oder eine Folge von Bildern anzuzeigen.

10 Bildlaufansicht

Es wird verwendet, um Inhalte anzuzeigen, die mehr als der Bildschirmbereich sind.

11 Tabellenansicht

Es wird zum Anzeigen einer scrollbaren Datenliste in mehreren Zeilen und Abschnitten verwendet.

12 Geteilte Sicht

Es wird zum Anzeigen von zwei Fenstern verwendet, wobei der Hauptbereich die Informationen im Detailbereich steuert.

13 Textvorschau

Es wird zum Anzeigen einer scrollbaren Liste von Textinformationen verwendet, die optional bearbeitet werden können.

14 Übergang anzeigen

Es werden die verschiedenen Ansichtsübergänge zwischen Ansichten erläutert.

15 Pflücker

Es wird zur Anzeige zur Auswahl bestimmter Daten aus einer Liste verwendet.

16 Schalter

Es wird als Deaktivierung und Aktivierung für Aktionen verwendet.

17 Schieberegler

Es wird verwendet, um Benutzern das Vornehmen von Anpassungen an einem Wert oder Prozess in einem Bereich zulässiger Werte zu ermöglichen.

18 Warnungen

Es wird verwendet, um Benutzern wichtige Informationen zu geben.

19 Symbole

Es ist eine Bilddarstellung, die für eine Aktion verwendet wird oder etwas darstellt, das mit der Anwendung zusammenhängt.

Der Beschleunigungsmesser dient zur Erfassung der Positionsänderungen des Geräts in den drei Richtungen x, y und z. Wir können die aktuelle Position des Geräts relativ zum Boden kennen. Um dieses Beispiel zu testen, müssen Sie es auf einem ausführendevice und funktioniert nicht auf Simulator.

Beschleunigungsmesser - Beteiligte Schritte

Step 1 - Erstellen Sie eine einfache View based application.

Step 2 - Fügen Sie drei Etiketten hinzu ViewController.xib und erstellen Sie ibOutlets mit den Namen xlabel, ylabel und zlabel.

Step 3 - Aktualisieren Sie ViewController.h wie folgt -

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController<UIAccelerometerDelegate> {
   IBOutlet UILabel *xlabel;
   IBOutlet UILabel *ylabel;
   IBOutlet UILabel *zlabel;
}
@end

Step 4 - Update ViewController.m wie folgt -

#import "ViewController.h"

@interface ViewController ()
@end

@implementation ViewController

- (void)viewDidLoad {
   [super viewDidLoad];
   [[UIAccelerometer sharedAccelerometer]setDelegate:self];
   //Do any additional setup after loading the view,typically from a nib
}

- (void)didReceiveMemoryWarning {
   [super didReceiveMemoryWarning];
   // Dispose of any resources that can be recreated.
}

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:
   (UIAcceleration *)acceleration {
   [xlabel setText:[NSString stringWithFormat:@"%f",acceleration.x]];
   [ylabel setText:[NSString stringWithFormat:@"%f",acceleration.y]];
   [zlabel setText:[NSString stringWithFormat:@"%f",acceleration.z]];
}
@end

Ausgabe

Wenn wir die Anwendung in ausführen iPhone Gerät erhalten wir die folgende Ausgabe -

Eine universelle Anwendung ist eine Anwendung, die sowohl für das iPhone als auch für das iPad in einer einzigen Binärdatei entwickelt wurde. Eine universelle Anwendung ermöglicht die Wiederverwendung von Code und schnelle Aktualisierungen.

Universelle Anwendung - Beteiligte Schritte

Step 1 - Erstellen Sie eine einfache View based application.

Step 2 - Ändern Sie den Dateinamen ViewController.xib Datei an ViewController_iPhone.xib wie unten im Dateiinspektor auf der rechten Seite gezeigt.

Step 3 - Wählen Sie Datei → Neu → Datei ... und dann den Unterabschnitt "User Interface" und auswählen View. Weiter klicken.

Step 4 - Wählen Sie die Gerätefamilie als iPad und klicken Sie auf Weiter.

Step 5 - Speichern Sie die Datei als ViewController_iPad.xib und wählen Sie Erstellen.

Step 6 - Fügen Sie in beiden Bereichen eine Beschriftung in der Mitte des Bildschirms hinzu ViewController_iPhone.xib und ViewController_iPad.xib.

Step 7 - In ViewController_iPad.xib, wähle aus identity inspector und legen Sie die benutzerdefinierte Klasse als fest ViewController.

Step 8 - Aktualisieren Sie die Anwendung: DidFinishLaunching: withOptions-Methode in AppDelegate.m wie folgt: -

- (BOOL)application:(UIApplication *)application
   didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
   self.window = [[UIWindow alloc] initWithFrame:[[UIScreen 
   mainScreen] bounds]];
   
   // Override point for customization after application launch.
   if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
      self.viewController = [[ViewController alloc] 
      initWithNibName:@"ViewController_iPhone" bundle:nil];
   } else {
      self.viewController = [[ViewController alloc] initWithNibName:
      @"ViewController_iPad" bundle:nil];
   }
   self.window.rootViewController = self.viewController;
   [self.window makeKeyAndVisible];
   return YES;
}

Step 9 - Aktualisieren Sie die Geräte in der Projektzusammenfassung auf Universal wie unten gezeigt -

Ausgabe

Wenn wir die Anwendung ausführen, erhalten wir die folgende Ausgabe:

Wenn wir die Anwendung im iPad-Simulator ausführen, erhalten wir die folgende Ausgabe:

Kamera ist eine der allgemeinen Funktionen in einem mobilen Gerät. Es ist uns möglich, Bilder mit der Kamera aufzunehmen und in unserer Anwendung zu verwenden, und es ist auch ganz einfach.

Kameramanagement - Beteiligte Schritte

Step 1 - Erstellen Sie eine einfache View based application.

Step 2 - Fügen Sie a hinzu button im ViewController.xib und erstellen Sie IBAction für die Schaltfläche.

Step 3 - Fügen Sie eine hinzu image view und erstellen Sie ein IBOutlet mit dem Namen imageView.

Step 4 - Update ViewController.h wie folgt -

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController<UIImagePickerControllerDelegate> {
   UIImagePickerController *imagePicker;
   IBOutlet UIImageView *imageView;
}

- (IBAction)showCamera:(id)sender;
@end

Step 5 - Update ViewController.m wie folgt -

#import "ViewController.h"

@interface ViewController ()
@end

@implementation ViewController

- (void)viewDidLoad {
   [super viewDidLoad];
}

- (void)didReceiveMemoryWarning {
   [super didReceiveMemoryWarning];
   // Dispose of any resources that can be recreated.
}

- (IBAction)showCamera:(id)sender {
   imagePicker.allowsEditing = YES;
   
   if ([UIImagePickerController isSourceTypeAvailable:
   UIImagePickerControllerSourceTypeCamera]) {
      imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
   } else {
      imagePicker.sourceType = 
      UIImagePickerControllerSourceTypePhotoLibrary;
   }
   [self presentModalViewController:imagePicker animated:YES];
}

-(void)imagePickerController:(UIImagePickerController *)picker 
   didFinishPickingMediaWithInfo:(NSDictionary *)info {
      UIImage *image = [info objectForKey:UIImagePickerControllerEditedImage];
      
      if (image == nil) {
         image = [info objectForKey:UIImagePickerControllerOriginalImage];
      }
   imageView.image = image;
}

-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
   [self dismissModalViewControllerAnimated:YES];
}
@end

Ausgabe

Wenn wir die Anwendung ausführen und auf die Schaltfläche Kamera anzeigen klicken, erhalten wir die folgende Ausgabe:

Sobald wir ein Bild aufgenommen haben, können wir das Bild bearbeiten, dh wie unten gezeigt verschieben und skalieren.

Wir können den aktuellen Standort des Benutzers in iOS leicht finden, vorausgesetzt, der Benutzer ermöglicht der Anwendung den Zugriff auf die Informationen mithilfe des zentralen Standort-Frameworks.

Standortbehandlung - Beteiligte Schritte

Step 1 - Erstellen Sie eine einfache View-basierte Anwendung.

Step 2 - Wählen Sie Ihre Projektdatei aus, wählen Sie dann Ziele aus und fügen Sie dann CoreLocation.framework hinzu, wie unten gezeigt. -

Step 3 - Fügen Sie zwei Etiketten hinzu ViewController.xib und erstellen Sie ibOutlets mit den Bezeichnungen latitudeLabel und longitudeLabel beziehungsweise.

Step 4 - Erstellen Sie eine neue Datei, indem Sie Datei → Neu → Datei ... → auswählen Objective C class und klicken Sie auf Weiter.

Step 5 - Benennen Sie die Klasse als LocationHandler mit "sub class of" als NSObject.

Step 6 - Wählen Sie erstellen.

Step 7 - Update LocationHandler.h wie folgt -

#import <Foundation/Foundation.h>
#import <CoreLocation/CoreLocation.h>

@protocol LocationHandlerDelegate <NSObject>

@required
-(void) didUpdateToLocation:(CLLocation*)newLocation 
   fromLocation:(CLLocation*)oldLocation;
@end

@interface LocationHandler : NSObject<CLLocationManagerDelegate> {
   CLLocationManager *locationManager;
}
@property(nonatomic,strong) id<LocationHandlerDelegate> delegate;

+(id)getSharedInstance;
-(void)startUpdating;
-(void) stopUpdating;

@end

Step 8 - Update LocationHandler.m wie folgt -

#import "LocationHandler.h"
static LocationHandler *DefaultManager = nil;

@interface LocationHandler()

-(void)initiate;

@end

@implementation LocationHandler

+(id)getSharedInstance{
   if (!DefaultManager) {
      DefaultManager = [[self allocWithZone:NULL]init];
      [DefaultManager initiate];
   }
   return DefaultManager;
}

-(void)initiate {
   locationManager = [[CLLocationManager alloc]init];
   locationManager.delegate = self;
}

-(void)startUpdating{
   [locationManager startUpdatingLocation];
}

-(void) stopUpdating {
   [locationManager stopUpdatingLocation];
}

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:
   (CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
   if ([self.delegate respondsToSelector:@selector
   (didUpdateToLocation:fromLocation:)]) {
      [self.delegate didUpdateToLocation:oldLocation 
      fromLocation:newLocation];
   }
}
@end

Step 9 - Update ViewController.h wie folgt, wo wir die implementiert haben LocationHandler delegate und erstelle zwei ibOutlets -

#import <UIKit/UIKit.h>
#import "LocationHandler.h"

@interface ViewController : UIViewController<LocationHandlerDelegate> {
   IBOutlet UILabel *latitudeLabel;
   IBOutlet UILabel *longitudeLabel;
}
@end

Step 10 - Update ViewController.m wie folgt -

#import "ViewController.h"

@interface ViewController ()
@end

@implementation ViewController

- (void)viewDidLoad {
   [super viewDidLoad];
   [[LocationHandler getSharedInstance]setDelegate:self];
   [[LocationHandler getSharedInstance]startUpdating];
}

- (void)didReceiveMemoryWarning {
   [super didReceiveMemoryWarning];
   // Dispose of any resources that can be recreated.
}

-(void)didUpdateToLocation:(CLLocation *)newLocation 
 fromLocation:(CLLocation *)oldLocation {
   [latitudeLabel setText:[NSString stringWithFormat:
   @"Latitude: %f",newLocation.coordinate.latitude]];
   [longitudeLabel setText:[NSString stringWithFormat:
   @"Longitude: %f",newLocation.coordinate.longitude]];
}
@end

Ausgabe

Wenn wir die Anwendung ausführen, erhalten wir die folgende Ausgabe:

SQLite kann in iOS zum Umgang mit Daten verwendet werden. Es werden SQLite-Abfragen verwendet, was es für diejenigen, die SQL kennen, einfacher macht.

Beteiligte Schritte

Step 1 - Erstellen Sie eine einfache View based application.

Step 2 - Wählen Sie Ihre Projektdatei aus, wählen Sie Ziele aus und fügen Sie sie hinzu libsqlite3.dylib Bibliothek in ausgewählten Frameworks.

Step 3 - Erstellen Sie eine neue Datei, indem Sie Datei → Neu → Datei ... → auswählen Objective C class und klicken Sie auf Weiter.

Step 4 - Benennen Sie die Klasse als DBManager mit "sub class of" als NSObject.

Step 5 - Wählen Sie erstellen.

Step 6 - Update DBManager.h wie folgt -

#import <Foundation/Foundation.h>
#import <sqlite3.h>

@interface DBManager : NSObject {
   NSString *databasePath;
}

+(DBManager*)getSharedInstance;
-(BOOL)createDB;
-(BOOL) saveData:(NSString*)registerNumber name:(NSString*)name 
   department:(NSString*)department year:(NSString*)year;
-(NSArray*) findByRegisterNumber:(NSString*)registerNumber;

@end

Step 7 - Update DBManager.m wie folgt -

#import "DBManager.h"
static DBManager *sharedInstance = nil;
static sqlite3 *database = nil;
static sqlite3_stmt *statement = nil;

@implementation DBManager

+(DBManager*)getSharedInstance {
   if (!sharedInstance) {
      sharedInstance = [[super allocWithZone:NULL]init];
      [sharedInstance createDB];
   }
   return sharedInstance;
}

-(BOOL)createDB {
   NSString *docsDir;
   NSArray *dirPaths;
   
   // Get the documents directory
   dirPaths = NSSearchPathForDirectoriesInDomains
   (NSDocumentDirectory, NSUserDomainMask, YES);
   docsDir = dirPaths[0];
   
   // Build the path to the database file
   databasePath = [[NSString alloc] initWithString: 
   [docsDir stringByAppendingPathComponent: @"student.db"]];
   BOOL isSuccess = YES;
   NSFileManager *filemgr = [NSFileManager defaultManager];
   
   if ([filemgr fileExistsAtPath: databasePath ] == NO) {
      const char *dbpath = [databasePath UTF8String];
      if (sqlite3_open(dbpath, &database) == SQLITE_OK) {
         char *errMsg;
         const char *sql_stmt =
         "create table if not exists studentsDetail (regno integer 
         primary key, name text, department text, year text)";
         
         if (sqlite3_exec(database, sql_stmt, NULL, NULL, &errMsg) != SQLITE_OK) {
            isSuccess = NO;
            NSLog(@"Failed to create table");
         }
         sqlite3_close(database);
         return  isSuccess;
      } else {
         isSuccess = NO;
         NSLog(@"Failed to open/create database");
      }
   }    
   return isSuccess;
}

- (BOOL) saveData:(NSString*)registerNumber name:(NSString*)name 
   department:(NSString*)department year:(NSString*)year; {
   const char *dbpath = [databasePath UTF8String];
   
   if (sqlite3_open(dbpath, &database) == SQLITE_OK) {
      NSString *insertSQL = [NSString stringWithFormat:@"insert into
      studentsDetail (regno,name, department, year) values
      (\"%d\",\"%@\", \"%@\", \"%@\")",[registerNumber integerValue],
      name, department, year];        
      const char *insert_stmt = [insertSQL UTF8String];
      sqlite3_prepare_v2(database, insert_stmt,-1, &statement, NULL);
      
      if (sqlite3_step(statement) == SQLITE_DONE) {
         return YES;
      } else {
         return NO;
      }
      sqlite3_reset(statement);
   }
   return NO;
}

- (NSArray*) findByRegisterNumber:(NSString*)registerNumber {
   const char *dbpath = [databasePath UTF8String];
   
   if (sqlite3_open(dbpath, &database) == SQLITE_OK) {
      NSString *querySQL = [NSString stringWithFormat:
      @"select name, department, year from studentsDetail where 
      regno=\"%@\"",registerNumber];
      const char *query_stmt = [querySQL UTF8String];
      NSMutableArray *resultArray = [[NSMutableArray alloc]init];
      
      if (sqlite3_prepare_v2(database, query_stmt, -1, &statement, NULL) == SQLITE_OK) {
         if (sqlite3_step(statement) == SQLITE_ROW) {
            NSString *name = [[NSString alloc] initWithUTF8String:
            (const char *) sqlite3_column_text(statement, 0)];
            [resultArray addObject:name];
            
            NSString *department = [[NSString alloc] initWithUTF8String:
            (const char *) sqlite3_column_text(statement, 1)];
            [resultArray addObject:department];
            
            NSString *year = [[NSString alloc]initWithUTF8String:
            (const char *) sqlite3_column_text(statement, 2)];
            [resultArray addObject:year];
            return resultArray;
         } else {
            NSLog(@"Not found");
            return nil;
         }
         sqlite3_reset(statement);
      }
   }
   return nil;
}

Step 8 - Update ViewController.xib Datei wie folgt -

Step 9 - Erstellen Sie IBOutlets für die obigen Textfelder.

Step 10 - Erstellen Sie eine IBAction für die oben genannten Schaltflächen.

Step 11 - Update ViewController.h wie folgt -

#import <UIKit/UIKit.h>
#import "DBManager.h"

@interface ViewController : UIViewController<UITextFieldDelegate> {
   IBOutlet UITextField *regNoTextField;
   IBOutlet UITextField *nameTextField;
   IBOutlet UITextField *departmentTextField;
   IBOutlet UITextField *yearTextField;
   IBOutlet UITextField *findByRegisterNumberTextField;
   IBOutlet UIScrollView *myScrollView;
}

-(IBAction)saveData:(id)sender;
-(IBAction)findData:(id)sender;
@end

Step 12 - Update ViewController.m wie folgt -

#import "ViewController.h"

@interface ViewController ()
@end

@implementation ViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)
   nibBundleOrNil {
   self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
   
   if (self) {
      // Custom initialization
   }
   return self;
}

- (void)viewDidLoad {
   [super viewDidLoad];
   // Do any additional setup after loading the view from its nib.
}

- (void)didReceiveMemoryWarning {
   [super didReceiveMemoryWarning];
   // Dispose of any resources that can be recreated.
}

-(IBAction)saveData:(id)sender {
   BOOL success = NO;
   NSString *alertString = @"Data Insertion failed";
   
   if (regNoTextField.text.length>0 &&nameTextField.text.length>0 &&
      departmentTextField.text.length>0 &&yearTextField.text.length>0 ) {
      success = [[DBManager getSharedInstance]saveData:
      regNoTextField.text name:nameTextField.text department:
      departmentTextField.text year:yearTextField.text];
   } else {
      alertString = @"Enter all fields";
   }     
   
   if (success == NO) {
      UIAlertView *alert = [[UIAlertView alloc]initWithTitle:
      alertString message:nil
      delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
      [alert show];
   }
}

-(IBAction)findData:(id)sender {
   NSArray *data = [[DBManager getSharedInstance]findByRegisterNumber:
   findByRegisterNumberTextField.text];
   
   if (data == nil) {
      UIAlertView *alert = [[UIAlertView alloc]initWithTitle:
      @"Data not found" message:nil delegate:nil cancelButtonTitle:
      @"OK" otherButtonTitles:nil];
      [alert show];
      regNoTextField.text = @"";
      nameTextField.text =@"";
      departmentTextField.text = @"";
      yearTextField.text =@"";
   } else {
      regNoTextField.text = findByRegisterNumberTextField.text;
      nameTextField.text =[data objectAtIndex:0];
      departmentTextField.text = [data objectAtIndex:1];
      yearTextField.text =[data objectAtIndex:2];
   }
}

#pragma mark - Text field delegate
-(void)textFieldDidBeginEditing:(UITextField *)textField {
   [myScrollView setFrame:CGRectMake(10, 50, 300, 200)];
   [myScrollView setContentSize:CGSizeMake(300, 350)];
}

-(void)textFieldDidEndEditing:(UITextField *)textField {
   [myScrollView setFrame:CGRectMake(10, 50, 300, 350)];

}

-(BOOL) textFieldShouldReturn:(UITextField *)textField {
   [textField resignFirstResponder];
   return YES;
}
@end

Ausgabe

Wenn wir die Anwendung ausführen, erhalten wir die folgende Ausgabe, in der wir die Schülerdetails hinzufügen und finden können:

Wir können E-Mails mit der E-Mail-Anwendung des iOS-Geräts senden.

Beteiligte Schritte

Step 1 - Erstellen Sie eine einfache View based application.

Step 2 - Wählen Sie Ihre Projektdatei aus, wählen Sie Ziele aus und fügen Sie sie hinzu MessageUI.framework.

Step 3 - Fügen Sie eine Schaltfläche hinzu ViewController.xib und erstellen Sie eine Aktion zum Senden von E-Mails.

Step 4 - Update ViewController.h wie folgt -

#import <UIKit/UIKit.h>
#import <MessageUI/MessageUI.h>

@interface ViewController : UIViewController<MFMailComposeViewControllerDelegate> {
   MFMailComposeViewController *mailComposer;
}

-(IBAction)sendMail:(id)sender;

@end

Step 5 - Update ViewController.m wie folgt -

#import "ViewController.h"

@interface ViewController ()
@end

@implementation ViewController

- (void)viewDidLoad {
   [super viewDidLoad];
}

- (void)didReceiveMemoryWarning {
   [super didReceiveMemoryWarning];
   // Dispose of any resources that can be recreated.
}

-(void)sendMail:(id)sender {
   mailComposer = [[MFMailComposeViewController alloc]init];
   mailComposer.mailComposeDelegate = self;
   [mailComposer setSubject:@"Test mail"];
   [mailComposer setMessageBody:@"Testing message 
   for the test mail" isHTML:NO];
   [self presentModalViewController:mailComposer animated:YES];
}

#pragma mark - mail compose delegate
-(void)mailComposeController:(MFMailComposeViewController *)controller 
   didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error{
   
   if (result) {
      NSLog(@"Result : %d",result);
   }
   
   if (error) {
      NSLog(@"Error : %@",error);
   }
   
   [self dismissModalViewControllerAnimated:YES];
}
@end

Ausgabe

Wenn wir die Anwendung ausführen, erhalten wir die folgende Ausgabe:

Wenn Sie auf E-Mail senden klicken, erhalten Sie die folgende Ausgabe:

Audio und Video sind in den neuesten Geräten weit verbreitet. Es wird in iOS mit Hilfe von unterstütztAVFoundation.framework und MediaPlayer.framework beziehungsweise.

Beteiligte Schritte

Step 1 - Erstellen Sie eine einfache View based application.

Step 2 - Wählen Sie Ihre Projektdatei aus, wählen Sie Ziele aus, und dann sollten wir hinzufügen AVFoundation.framework und MediaPlayer.framework.

Step 3 - Fügen Sie in ViewController.xib zwei Schaltflächen hinzu und erstellen Sie eine Aktion zum Abspielen von Audio bzw. Video.

Step 4 - Update ViewController.h wie folgt -

#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>
#import <MediaPlayer/MediaPlayer.h>

@interface ViewController : UIViewController {
   AVAudioPlayer *audioPlayer;
   MPMoviePlayerViewController *moviePlayer;
}
-(IBAction)playAudio:(id)sender;
-(IBAction)playVideo:(id)sender;
@end

Step 5 - Update ViewController.m wie folgt -

#import "ViewController.h"

@interface ViewController ()
@end

@implementation ViewController

- (void)viewDidLoad {
   [super viewDidLoad];
}

- (void)didReceiveMemoryWarning {
   [super didReceiveMemoryWarning];
   // Dispose of any resources that can be recreated.
}

-(IBAction)playAudio:(id)sender {
   NSString *path = [[NSBundle mainBundle]
   pathForResource:@"audioTest" ofType:@"mp3"];
   audioPlayer = [[AVAudioPlayer alloc]initWithContentsOfURL:
   [NSURL fileURLWithPath:path] error:NULL];
   [audioPlayer play];
}

-(IBAction)playVideo:(id)sender {
   NSString *path = [[NSBundle mainBundle]pathForResource:
   @"videoTest" ofType:@"mov"];
   moviePlayer = [[MPMoviePlayerViewController 
   alloc]initWithContentURL:[NSURL fileURLWithPath:path]];
   [self presentModalViewController:moviePlayer animated:NO];
}
@end

Hinweis

Wir müssen Audio- und Videodateien hinzufügen, um sicherzustellen, dass wir die erwartete Ausgabe erhalten.

Ausgabe

Wenn wir die Anwendung ausführen, erhalten wir die folgende Ausgabe:

Wenn wir auf Video abspielen klicken, erhalten wir eine Ausgabe wie unten gezeigt -

Wenn wir auf Audio abspielen klicken, hören Sie das Audio.

Die Dateibehandlung kann mit der Anwendung nicht visuell erklärt werden. Daher werden im Folgenden die wichtigsten Methoden für die Handhabung von Dateien erläutert. Beachten Sie, dass das Anwendungspaket nur über Leseberechtigung verfügt und wir die Dateien nicht ändern können. Sie können das Dokumentenverzeichnis Ihrer Anwendung trotzdem ändern.

Methoden für die Dateiverwaltung

Die Methoden für accessing und manipulatingDie Dateien werden unten diskutiert. Hier müssen wir die Zeichenfolgen FilePath1, FilePath2 und FilePath durch unsere erforderlichen vollständigen Dateipfade ersetzen, um die gewünschte Aktion zu erhalten.

Überprüfen Sie, ob eine Datei in einem Pfad vorhanden ist

NSFileManager *fileManager = [NSFileManager defaultManager];

//Get documents directory
NSArray *directoryPaths = NSSearchPathForDirectoriesInDomains
(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectoryPath = [directoryPaths objectAtIndex:0];

if ([fileManager fileExistsAtPath:@""]==YES) {
   NSLog(@"File exists");
}

Vergleichen von zwei Dateiinhalten

if ([fileManager contentsEqualAtPath:@"FilePath1" andPath:@" FilePath2"]) {
   NSLog(@"Same content");
}

Überprüfen Sie, ob es beschreibbar, lesbar und ausführbar ist

if ([fileManager isWritableFileAtPath:@"FilePath"]) {
   NSLog(@"isWritable");
}

if ([fileManager isReadableFileAtPath:@"FilePath"]) {
   NSLog(@"isReadable");
}

if ( [fileManager isExecutableFileAtPath:@"FilePath"]) {
   NSLog(@"is Executable");
}

Datei bewegen

if([fileManager moveItemAtPath:@"FilePath1" 
   toPath:@"FilePath2" error:NULL]) {
   NSLog(@"Moved successfully");
}

Datei kopieren

if ([fileManager copyItemAtPath:@"FilePath1" 
   toPath:@"FilePath2"  error:NULL]) {
   NSLog(@"Copied successfully");
}

Datei löschen

if ([fileManager removeItemAtPath:@"FilePath" error:NULL]) {
   NSLog(@"Removed successfully");
}

Datei lesen

NSData *data = [fileManager contentsAtPath:@"Path"];

Datei schreiben

[fileManager createFileAtPath:@"" contents:data attributes:nil];

Karten sind immer hilfreich, um Orte zu finden. Karten werden mithilfe des MapKit-Frameworks in iOS integriert.

Beteiligte Schritte

Step 1 - Erstellen Sie eine einfache ansichtsbasierte Anwendung.

Step 2 - Wählen Sie Ihre Projektdatei aus, wählen Sie dann Ziele aus und fügen Sie MapKit.framework hinzu.

Step 3 - Wir sollten auch Corelocation.framework hinzufügen.

Step 4 - Fügen Sie ViewController.xib eine MapView hinzu, erstellen Sie ein ibOutlet und benennen Sie es als mapView.

Step 5 - Erstellen Sie eine neue Datei, indem Sie Datei → Neu → Datei ... → Ziel C-Klasse auswählen und auf Weiter klicken.

Step 6 - Benennen Sie die Klasse als MapAnnotation mit "Unterklasse von" als NSObject.

Step 7 - Wählen Sie erstellen.

Step 8 - Aktualisieren Sie MapAnnotation.h wie folgt -

#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>

@interface MapAnnotation : NSObject<MKAnnotation>
@property (nonatomic, strong) NSString *title;
@property (nonatomic, readwrite) CLLocationCoordinate2D coordinate;

- (id)initWithTitle:(NSString *)title andCoordinate:
   (CLLocationCoordinate2D)coordinate2d;

@end

Step 9 - Update MapAnnotation.m wie folgt -

#import "MapAnnotation.h"

@implementation MapAnnotation
-(id)initWithTitle:(NSString *)title andCoordinate:
   (CLLocationCoordinate2D)coordinate2d {
  
   self.title = title;
   self.coordinate =coordinate2d;
   return self;
}
@end

Step 10 - Update ViewController.h wie folgt -

#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
#import <CoreLocation/CoreLocation.h>

@interface ViewController : UIViewController<MKMapViewDelegate> {
   MKMapView *mapView;
}
@end

Step 11 - Update ViewController.m wie folgt -

#import "ViewController.h"
#import "MapAnnotation.h"

@interface ViewController ()
@end

@implementation ViewController

- (void)viewDidLoad {
   [super viewDidLoad];
   mapView = [[MKMapView alloc]initWithFrame:
   CGRectMake(10, 100, 300, 300)];
   mapView.delegate = self;
   mapView.centerCoordinate = CLLocationCoordinate2DMake(37.32, -122.03);
   mapView.mapType = MKMapTypeHybrid;
   CLLocationCoordinate2D location;
   location.latitude = (double) 37.332768;
   location.longitude = (double) -122.030039;
   
   // Add the annotation to our map view
   MapAnnotation *newAnnotation = [[MapAnnotation alloc]
   initWithTitle:@"Apple Head quaters" andCoordinate:location];
   [mapView addAnnotation:newAnnotation];
   CLLocationCoordinate2D location2;
   location2.latitude = (double) 37.35239;
   location2.longitude = (double) -122.025919;
   MapAnnotation *newAnnotation2 = [[MapAnnotation alloc] 
   initWithTitle:@"Test annotation" andCoordinate:location2];
   [mapView addAnnotation:newAnnotation2];
   [self.view addSubview:mapView];
}

// When a map annotation point is added, zoom to it (1500 range)
- (void)mapView:(MKMapView *)mv didAddAnnotationViews:(NSArray *)views {
   MKAnnotationView *annotationView = [views objectAtIndex:0];
   id <MKAnnotation> mp = [annotationView annotation];
   MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance
   ([mp coordinate], 1500, 1500);
   [mv setRegion:region animated:YES];
   [mv selectAnnotation:mp animated:YES];
}

- (void)didReceiveMemoryWarning {
   [super didReceiveMemoryWarning];
   // Dispose of any resources that can be recreated.
}
@end

Ausgabe

Wenn wir die Anwendung ausführen, erhalten wir die Ausgabe wie unten gezeigt -

Wenn wir die Karte nach oben scrollen, erhalten wir die Ausgabe wie unten gezeigt -

Der In-App-Kauf wird verwendet, um zusätzliche Inhalte zu erwerben oder Funktionen in Bezug auf eine Anwendung zu aktualisieren.

Beteiligte Schritte

Step 1 - Stellen Sie in iTunes Connect sicher, dass Sie eine haben unique App ID und wenn wir das Anwendungsupdate mit dem erstellen bundle ID und Codesignatur in Xcode mit dem entsprechenden Bereitstellungsprofil.

Step 2- Erstellen Sie eine neue Anwendung und aktualisieren Sie die Anwendungsinformationen. Mehr dazu erfahren Sie bei AppleAdd new apps Dokumentation.

Step 3 - Fügen Sie ein neues Produkt für den In-App-Kauf in hinzu Manage In-App Purchase der Seite Ihrer Bewerbung.

Step 4- Stellen Sie sicher, dass Sie die Bankdaten für Ihre Anwendung einrichten. Dies muss für eingerichtet werdenIn-App purchasearbeiten. Erstellen Sie außerdem ein Testbenutzerkonto mitManage Users Option auf der iTunes Connect-Seite Ihrer App.

Step 5 - Die nächsten Schritte beziehen sich auf die Verarbeitung von Code und die Erstellung der Benutzeroberfläche für unseren In-App-Kauf.

Step 6 - Erstellen Sie eine single view application und geben Sie die Bundle-ID ein, die in iTunes connect angegeben ist.

Step 7 - Aktualisieren Sie die ViewController.xib wie unten gezeigt -

Step 8 - Erstellen IBOutlets für die drei Beschriftungen und die Schaltfläche, die sie als productTitleLabel, productDescriptionLabel, productPriceLabel bzw. purchaseButton benennt.

Step 9 - Wählen Sie Ihre Projektdatei aus, wählen Sie Ziele aus und fügen Sie sie hinzu StoreKit.framework.

Step 10 - Update ViewController.h wie folgt -

#import <UIKit/UIKit.h>
#import <StoreKit/StoreKit.h>

@interface ViewController : UIViewController<
SKProductsRequestDelegate,SKPaymentTransactionObserver> {
   SKProductsRequest *productsRequest;
   NSArray *validProducts;
   UIActivityIndicatorView *activityIndicatorView;
   IBOutlet UILabel *productTitleLabel;
   IBOutlet UILabel *productDescriptionLabel;
   IBOutlet UILabel *productPriceLabel;
   IBOutlet UIButton *purchaseButton;
}

- (void)fetchAvailableProducts;
- (BOOL)canMakePurchases;
- (void)purchaseMyProduct:(SKProduct*)product;
- (IBAction)purchase:(id)sender;

@end

Step 11 - Update ViewController.m wie folgt -

#import "ViewController.h"
#define kTutorialPointProductID 
@"com.tutorialPoints.testApp.testProduct"

@interface ViewController ()
@end

@implementation ViewController

- (void)viewDidLoad {
   [super viewDidLoad];
   
   // Adding activity indicator
   activityIndicatorView = [[UIActivityIndicatorView alloc]
   initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
   activityIndicatorView.center = self.view.center;
   [activityIndicatorView hidesWhenStopped];
   [self.view addSubview:activityIndicatorView];
   [activityIndicatorView startAnimating];
   
   //Hide purchase button initially
   purchaseButton.hidden = YES;
   [self fetchAvailableProducts];
}

- (void)didReceiveMemoryWarning {
   [super didReceiveMemoryWarning];
   // Dispose of any resources that can be recreated.
}

-(void)fetchAvailableProducts {
   NSSet *productIdentifiers = [NSSet 
   setWithObjects:kTutorialPointProductID,nil];
   productsRequest = [[SKProductsRequest alloc] 
   initWithProductIdentifiers:productIdentifiers];
   productsRequest.delegate = self;
   [productsRequest start];
}

- (BOOL)canMakePurchases {
   return [SKPaymentQueue canMakePayments];
}

- (void)purchaseMyProduct:(SKProduct*)product {
   if ([self canMakePurchases]) {
      SKPayment *payment = [SKPayment paymentWithProduct:product];
      [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
      [[SKPaymentQueue defaultQueue] addPayment:payment];
   } else {
      UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:
      @"Purchases are disabled in your device" message:nil delegate:
      self cancelButtonTitle:@"Ok" otherButtonTitles: nil];
      [alertView show];
   }
}
-(IBAction)purchase:(id)sender {
   [self purchaseMyProduct:[validProducts objectAtIndex:0]];
   purchaseButton.enabled = NO; 
}

#pragma mark StoreKit Delegate

-(void)paymentQueue:(SKPaymentQueue *)queue 
updatedTransactions:(NSArray *)transactions {
   for (SKPaymentTransaction *transaction in transactions) {
      switch (transaction.transactionState) {
         case SKPaymentTransactionStatePurchasing:
            NSLog(@"Purchasing");
         break;
         
         case SKPaymentTransactionStatePurchased:
            if ([transaction.payment.productIdentifier 
            isEqualToString:kTutorialPointProductID]) {
               NSLog(@"Purchased ");
               UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:
               @"Purchase is completed succesfully" message:nil delegate:
               self cancelButtonTitle:@"Ok" otherButtonTitles: nil];
               [alertView show];
            }
            [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
         break;
            
         case SKPaymentTransactionStateRestored:
            NSLog(@"Restored ");
            [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
         break;
            
         case SKPaymentTransactionStateFailed:
            NSLog(@"Purchase failed ");
         break
         default:
         break;
      }
   }
}

-(void)productsRequest:(SKProductsRequest *)request 
didReceiveResponse:(SKProductsResponse *)response {
   SKProduct *validProduct = nil;
   int count = [response.products count];
   
   if (count>0) {
      validProducts = response.products;
      validProduct = [response.products objectAtIndex:0];
      
      if ([validProduct.productIdentifier 
         isEqualToString:kTutorialPointProductID]) {
         [productTitleLabel setText:[NSString stringWithFormat:
            @"Product Title: %@",validProduct.localizedTitle]];
         [productDescriptionLabel setText:[NSString stringWithFormat:
            @"Product Desc: %@",validProduct.localizedDescription]];
         [productPriceLabel setText:[NSString stringWithFormat:
            @"Product Price: %@",validProduct.price]];
      }
   } else {
      UIAlertView *tmp = [[UIAlertView alloc]
         initWithTitle:@"Not Available"
         message:@"No products to purchase"
         delegate:self
         cancelButtonTitle:nil
         otherButtonTitles:@"Ok", nil];
         [tmp show];
   }
   
   [activityIndicatorView stopAnimating];
   purchaseButton.hidden = NO;
}
@end

Hinweis

Sie müssen kTutorialPointProductID auf die Produkt-ID aktualisieren, die Sie für Ihren In-App-Kauf erstellt haben. Sie können mehr als ein Produkt hinzufügen, indem Sie das NSSet des productIdentifiers in fetchAvailableProducts aktualisieren. Führen Sie ähnlich die kaufbezogenen Aktionen für die von Ihnen hinzugefügten Produkt-IDs aus.

Ausgabe

Wenn wir die Anwendung ausführen, erhalten wir die folgende Ausgabe:

Stellen Sie sicher, dass Sie sich im Einstellungsbildschirm von Ihrem Konto abgemeldet haben. Wählen Sie beim Klicken auf Kauf einleiten die Option Vorhandene Apple-ID verwenden aus. Geben Sie Ihren gültigen Benutzernamen und Ihr Passwort für das Testkonto ein. In wenigen Sekunden wird die folgende Warnung angezeigt.

Sobald Ihr Produkt erfolgreich gekauft wurde, erhalten Sie die folgende Warnung. Sie können relevanten Code zum Aktualisieren der Anwendungsfunktionen sehen, in denen diese Warnung angezeigt wird.

iAd wird zum Anzeigen von Anzeigen verwendet, die vom Apple Server geliefert werden. iAd hilft uns dabei, mit einer iOS-Anwendung Einnahmen zu erzielen.

iAd-Integration - Schritte

Step 1 - Erstellen Sie eine einfache ansichtsbasierte Anwendung.

Step 2 - Wählen Sie Ihre Projektdatei aus, wählen Sie dann Ziele aus und fügen Sie iAd.framework in ausgewählten Frameworks hinzu.

Step 3 - Aktualisieren Sie ViewController.h wie folgt -

#import <UIKit/UIKit.h>
#import <iAd/iAd.h>

@interface ViewController : UIViewController<ADBannerViewDelegate> {
   ADBannerView *bannerView;
}
@end

Step 4 - Update ViewController.m wie folgt -

#import "ViewController.h"

@interface ViewController ()
@end

@implementation ViewController

- (void)viewDidLoad {
   [super viewDidLoad];
   bannerView = [[ADBannerView alloc]initWithFrame:
   CGRectMake(0, 0, 320, 50)];
   
   // Optional to set background color to clear color
   [bannerView setBackgroundColor:[UIColor clearColor]];
   [self.view addSubview: bannerView];
}

- (void)didReceiveMemoryWarning {
   [super didReceiveMemoryWarning];
   // Dispose of any resources that can be recreated.
}

#pragma mark - AdViewDelegates

-(void)bannerView:(ADBannerView *)banner 
   didFailToReceiveAdWithError:(NSError *)error {
   NSLog(@"Error loading");
}

-(void)bannerViewDidLoadAd:(ADBannerView *)banner {
   NSLog(@"Ad loaded");
}

-(void)bannerViewWillLoadAd:(ADBannerView *)banner {
   NSLog(@"Ad will load");
}

-(void)bannerViewActionDidFinish:(ADBannerView *)banner {
   NSLog(@"Ad did finish");
}
@end

Ausgabe

Wenn wir die Anwendung ausführen, erhalten wir die folgende Ausgabe:

Gamekit ist ein Framework, das einer iOS-Anwendung Ranglisten, Erfolge und weitere Funktionen bietet. In diesem Tutorial erklären wir die Schritte zum Hinzufügen einer Rangliste und zum Aktualisieren der Punktzahl.

Beteiligte Schritte

Step 1 - Stellen Sie in iTunes Connect sicher, dass Sie eine haben unique App ID und wenn wir das Anwendungsupdate mit dem erstellen bundle ID und Codesignatur in Xcode mit dem entsprechenden Bereitstellungsprofil.

Step 2- Erstellen Sie eine neue Anwendung und aktualisieren Sie die Anwendungsinformationen. Weitere Informationen hierzu finden Sie in der Dokumentation zu neuen Apps von Apple.

Step 3 - Richten Sie eine Rangliste ein Manage Game Center auf der Seite Ihrer Anwendung, wo Sie eine einzelne Bestenliste hinzufügen und geben leaderboard IDund Punktzahltyp. Hier geben wir die Ranglisten-ID als TutorialPoint an.

Step 4 - Die nächsten Schritte beziehen sich auf den Umgang mit Code und das Erstellen einer Benutzeroberfläche für unsere Anwendung.

Step 5 - Erstellen Sie eine single view application und geben Sie die bundle identifier ist die in angegebene Kennung iTunes connect.

Step 6 - Aktualisieren Sie die ViewController.xib wie unten gezeigt -

Step 7 - Wählen Sie Ihre Projektdatei aus und wählen Sie dann targets und dann hinzufügen GameKit.framework.

Step 8 - Erstellen IBActions für die Schaltflächen haben wir hinzugefügt.

Step 9 - Aktualisieren Sie die ViewController.h Datei wie folgt -

#import <UIKit/UIKit.h>
#import <GameKit/GameKit.h>

@interface ViewController : UIViewController
<GKLeaderboardViewControllerDelegate>

-(IBAction)updateScore:(id)sender;
-(IBAction)showLeaderBoard:(id)sender;

@end

Step 10 - Update ViewController.m wie folgt -

#import "ViewController.h"

@interface ViewController ()
@end

@implementation ViewController

- (void)viewDidLoad {
   [super viewDidLoad];
   if([GKLocalPlayer localPlayer].authenticated == NO) {
      [[GKLocalPlayer localPlayer] 
      authenticateWithCompletionHandler:^(NSError *error) {
         NSLog(@"Error%@",error);
      }];
   }    
}

- (void)didReceiveMemoryWarning {
   [super didReceiveMemoryWarning];
   // Dispose of any resources that can be recreated.
}

- (void) updateScore: (int64_t) score 
   forLeaderboardID: (NSString*) category {
   GKScore *scoreObj = [[GKScore alloc]
   initWithCategory:category];
   scoreObj.value = score;
   scoreObj.context = 0;
   
   [scoreObj reportScoreWithCompletionHandler:^(NSError *error) {
      // Completion code can be added here
      UIAlertView *alert = [[UIAlertView alloc]
      initWithTitle:nil message:@"Score Updated Succesfully" 
      delegate:self cancelButtonTitle:@"Ok" otherButtonTitles: nil];
      [alert show];
   }];
}

-(IBAction)updateScore:(id)sender {
   [self updateScore:200 forLeaderboardID:@"tutorialsPoint"];
}

-(IBAction)showLeaderBoard:(id)sender {
   GKLeaderboardViewController *leaderboardViewController =
   [[GKLeaderboardViewController alloc] init];
   leaderboardViewController.leaderboardDelegate = self;
   [self presentModalViewController:
   leaderboardViewController animated:YES];
}

#pragma mark - Gamekit delegates
- (void)leaderboardViewControllerDidFinish:
(GKLeaderboardViewController *)viewController {
   [self dismissModalViewControllerAnimated:YES];
}
@end

Ausgabe

Wenn wir die Anwendung ausführen, erhalten wir die folgende Ausgabe:

Wenn wir auf "Rangliste anzeigen" klicken, wird ein Bildschirm angezeigt, der dem folgenden ähnelt:

Wenn wir auf "Punktzahl aktualisieren" klicken, wird die Punktzahl in unserer Rangliste aktualisiert und wir erhalten eine Benachrichtigung wie unten gezeigt -

Storyboards werden in iOS 5 eingeführt. Wenn wir Storyboards verwenden, sollte unser Bereitstellungsziel 5.0 oder höher sein. Mithilfe von Storyboards können wir alle Bildschirme einer Anwendung erstellen und die Bildschirme unter einer Schnittstelle miteinander verbinden. MainStoryboard.storyboard. Es hilft auch bei der Reduzierung der Codierung von Push- / Presenting-View-Controllern.

Beteiligte Schritte

Step 1 - Erstellen Sie eine single view application und stellen Sie sicher, dass Sie auswählen storyboard Kontrollkästchen beim Erstellen der Anwendung.

Step 2 - Wählen Sie MainStoryboard.storyboardHier finden Sie Single View Controller. Fügen Sie einen weiteren Ansichts-Controller hinzu und aktualisieren Sie die Ansichts-Controller wie unten gezeigt.

Step 3- Lassen Sie uns nun beide View Controller verbinden. Klicken Sie mit der rechten Maustaste auf die Schaltfläche "Modal anzeigen" und ziehen Sie sie wie unten gezeigt auf den rechten Ansichts-Controller im linken Seitenansicht-Controller.

Step 4 - Wählen Sie Modal aus den drei unten gezeigten Optionen.

Step 5 - Update ViewController.h wie folgt -

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

-(IBAction)done:(UIStoryboardSegue *)seque;

@end

Step 6 - Update ViewController.m wie folgt -

#import "ViewController.h"

@interface ViewController ()
@end

@implementation ViewController

- (void)viewDidLoad {
   [super viewDidLoad];	
}

- (void)didReceiveMemoryWarning {
   [super didReceiveMemoryWarning];
   // Dispose of any resources that can be recreated.
}

-(IBAction)done:(UIStoryboardSegue *)seque {
   [self.navigationController popViewControllerAnimated:YES];
}

@end

Step 7 - Wählen Sie das MainStoryboard.storyboard aus und klicken Sie mit der rechten Maustaste auf die Schaltfläche Beenden im Controller für die rechte Seitenansicht. Wählen Sie Fertig und verbinden Sie sich mit der Schaltfläche Zurück, wie unten gezeigt.

Ausgabe

Wenn wir die Anwendung in einem ausführen iPhone Gerät erhalten wir die folgende Ausgabe -

Wenn wir "show modal" auswählen, erhalten wir die folgende Ausgabe -

Auto-Layouts wurden in eingeführt iOS 6.0.Wenn wir automatische Layouts verwenden, sollte unser Bereitstellungsziel 6.0 und höher sein. Mithilfe von automatischen Layouts können wir Schnittstellen erstellen, die für mehrere Ausrichtungen und mehrere Geräte verwendet werden können.

Ziel unseres Beispiels

Wir werden zwei Schaltflächen hinzufügen, die in einem bestimmten Abstand von der Mitte des Bildschirms platziert werden. Wir werden auch versuchen, ein anpassbares Textfeld hinzuzufügen, das aus einem bestimmten Abstand über den Schaltflächen platziert wird.

Unser Vorgehen

Wir werden ein Textfeld und zwei Schaltflächen im Code zusammen mit ihren Einschränkungen hinzufügen. Die Einschränkungen der einzelnen UI-Elemente werden erstellt und der Superansicht hinzugefügt. Wir müssen die automatische Größenänderung für jedes der hinzugefügten UI-Elemente deaktivieren, um das gewünschte Ergebnis zu erzielen.

Beteiligte Schritte

Step 1 - Erstellen Sie eine einfache ansichtsbasierte Anwendung.

Step 2 - Wir werden nur ViewController.m bearbeiten und es ist wie folgt -

#import "ViewController.h"

@interface ViewController ()
@property (nonatomic, strong) UIButton *leftButton;
@property (nonatomic, strong) UIButton *rightButton;
@property (nonatomic, strong) UITextField *textfield;

@end
@implementation ViewController

- (void)viewDidLoad {
   [super viewDidLoad];
   UIView *superview = self.view;

   /*1. Create leftButton and add to our view*/
   self.leftButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
   self.leftButton.translatesAutoresizingMaskIntoConstraints = NO;
   [self.leftButton setTitle:@"LeftButton" forState:UIControlStateNormal];
   [self.view addSubview:self.leftButton];

   /* 2. Constraint to position LeftButton's X*/
   NSLayoutConstraint *leftButtonXConstraint = [NSLayoutConstraint 
   constraintWithItem:self.leftButton attribute:NSLayoutAttributeCenterX 
   relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:superview attribute:
   NSLayoutAttributeCenterX multiplier:1.0 constant:-60.0f];

   /* 3. Constraint to position LeftButton's Y*/
   NSLayoutConstraint *leftButtonYConstraint = [NSLayoutConstraint 
   constraintWithItem:self.leftButton attribute:NSLayoutAttributeCenterY 
   relatedBy:NSLayoutRelationEqual toItem:superview attribute:
   NSLayoutAttributeCenterY multiplier:1.0f constant:0.0f];

   /* 4. Add the constraints to button's superview*/
   [superview addConstraints:@[ leftButtonXConstraint,
   leftButtonYConstraint]];

   /*5. Create rightButton and add to our view*/
   self.rightButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
   self.rightButton.translatesAutoresizingMaskIntoConstraints = NO;
   [self.rightButton setTitle:@"RightButton" forState:UIControlStateNormal];
   [self.view addSubview:self.rightButton];

   /*6. Constraint to position RightButton's X*/
   NSLayoutConstraint *rightButtonXConstraint = [NSLayoutConstraint 
   constraintWithItem:self.rightButton attribute:NSLayoutAttributeCenterX 
   relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:superview attribute:
   NSLayoutAttributeCenterX multiplier:1.0 constant:60.0f];

   /*7. Constraint to position RightButton's Y*/
   rightButtonXConstraint.priority = UILayoutPriorityDefaultHigh;
   NSLayoutConstraint *centerYMyConstraint = [NSLayoutConstraint 
   constraintWithItem:self.rightButton attribute:NSLayoutAttributeCenterY 
   relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:superview attribute:
   NSLayoutAttributeCenterY multiplier:1.0f constant:0.0f];
   [superview addConstraints:@[centerYMyConstraint,
   rightButtonXConstraint]];

   //8. Add Text field
   self.textfield = [[UITextField alloc]initWithFrame:
   CGRectMake(0, 100, 100, 30)];
   self.textfield.borderStyle = UITextBorderStyleRoundedRect;
   self.textfield.translatesAutoresizingMaskIntoConstraints = NO;
   [self.view addSubview:self.textfield];

   //9. Text field Constraints
   NSLayoutConstraint *textFieldTopConstraint = [NSLayoutConstraint 
   constraintWithItem:self.textfield attribute:NSLayoutAttributeTop 
   relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:superview 
   attribute:NSLayoutAttributeTop multiplier:1.0 constant:60.0f];
   NSLayoutConstraint *textFieldBottomConstraint = [NSLayoutConstraint 
   constraintWithItem:self.textfield attribute:NSLayoutAttributeTop 
   relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:self.rightButton 
   attribute:NSLayoutAttributeTop multiplier:0.8 constant:-60.0f];
   NSLayoutConstraint *textFieldLeftConstraint = [NSLayoutConstraint 
   constraintWithItem:self.textfield attribute:NSLayoutAttributeLeft 
   relatedBy:NSLayoutRelationEqual toItem:superview attribute:
   NSLayoutAttributeLeft multiplier:1.0 constant:30.0f];
   NSLayoutConstraint *textFieldRightConstraint = [NSLayoutConstraint 
   constraintWithItem:self.textfield attribute:NSLayoutAttributeRight 
   relatedBy:NSLayoutRelationEqual toItem:superview attribute:
   NSLayoutAttributeRight multiplier:1.0 constant:-30.0f];
   [superview addConstraints:@[textFieldBottomConstraint ,
   textFieldLeftConstraint, textFieldRightConstraint, 
   textFieldTopConstraint]];
}

- (void)didReceiveMemoryWarning {
   [super didReceiveMemoryWarning];
   // Dispose of any resources that can be recreated.
}
@end

Zu beachtende Punkte

In den mit 1, 5 und 8 gekennzeichneten Schritten haben wir nur programmgesteuert zwei Schaltflächen bzw. ein Textfeld hinzugefügt.

In den restlichen Schritten haben wir Einschränkungen erstellt und diese Einschränkungen zu den jeweiligen Superansichten hinzugefügt, bei denen es sich tatsächlich um Selbstansichten handelt. Die Einschränkungen einer der linken Schaltflächen sind wie folgt:

NSLayoutConstraint *leftButtonXConstraint = [NSLayoutConstraint 
constraintWithItem:self.leftButton attribute:NSLayoutAttributeCenterX 
relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:superview attribute:
NSLayoutAttributeCenterX multiplier:1.0 constant:-60.0f];

Wir haben ConstraintWithItem und ToItem, die entscheiden, zwischen welchen UI-Elementen wir die Constraint erstellen. Das Attribut entscheidet, auf welcher Basis die beiden Elemente miteinander verbunden sind. "relatedBy" entscheidet, wie stark die Attribute zwischen den Elementen wirken. Der Multiplikator ist der Multiplikationsfaktor und die Konstante wird dem Multiplikator hinzugefügt.

Im obigen Beispiel ist das X von leftButton in Bezug auf die Mitte der Superansicht immer größer oder gleich -60 Pixel. In ähnlicher Weise werden andere Einschränkungen definiert.

Ausgabe

Wenn wir die Anwendung ausführen, erhalten wir die folgende Ausgabe auf dem iPhone-Simulator:

Wenn wir die Ausrichtung des Simulators in Querformat ändern, erhalten wir die folgende Ausgabe:

Wenn wir dieselbe Anwendung auf dem iPhone 5-Simulator ausführen, erhalten wir die folgende Ausgabe:

Wenn wir die Ausrichtung des Simulators in Querformat ändern, erhalten wir die folgende Ausgabe:

Twitter wurde integriert in iOS 5.0 und Facebook wurde integriert iOS 6.0. Unser Tutorial konzentriert sich auf die Verwendung der von Apple bereitgestellten Klassen. Die Bereitstellungsziele für Twitter und Facebook sind iOS 5.0 bzw. iOS 6.0.

Beteiligte Schritte

Step 1 - Erstellen Sie eine einfache ansichtsbasierte Anwendung.

Step 2 - Wählen Sie Ihre Projektdatei aus und wählen Sie dann targets und dann hinzufügen Social.framework und Accounts.framework im choose frameworks.

Step 3 - Fügen Sie zwei Schaltflächen mit den Namen facebookPost und twitterPost hinzu und erstellen Sie ibActions für diese.

Step 4 - Update ViewController.h wie folgt -

#import <Social/Social.h>
#import <Accounts/Accounts.h>
#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

-(IBAction)twitterPost:(id)sender;
-(IBAction)facebookPost:(id)sender;

@end

Step 5 - Update ViewController.m wie folgt -

#import "ViewController.h"

@interface ViewController ()
@end

@implementation ViewController

- (void)viewDidLoad {
   [super viewDidLoad];
}

- (void)didReceiveMemoryWarning {
   [super didReceiveMemoryWarning];
   // Dispose of any resources that can be recreated.
}

-(IBAction)facebookPost:(id)sender {
   SLComposeViewController *controller = [SLComposeViewController 
   composeViewControllerForServiceType:SLServiceTypeFacebook];
   SLComposeViewControllerCompletionHandler myBlock = 
      ^(SLComposeViewControllerResult result){
      
      if (result == SLComposeViewControllerResultCancelled) {
         NSLog(@"Cancelled");
      } else {
         NSLog(@"Done");
      }
      [controller dismissViewControllerAnimated:YES completion:nil];
   };
   controller.completionHandler = myBlock;

   //Adding the Text to the facebook post value from iOS
   [controller setInitialText:@"My test post"];

   //Adding the URL to the facebook post value from iOS
   [controller addURL:[NSURL URLWithString:@"http://www.test.com"]];

   //Adding the Text to the facebook post value from iOS
   [self presentViewController:controller animated:YES completion:nil];
}

-(IBAction)twitterPost:(id)sender {
   SLComposeViewController *tweetSheet = [SLComposeViewController 
   composeViewControllerForServiceType:SLServiceTypeTwitter];
   [tweetSheet setInitialText:@"My test tweet"];
   [self presentModalViewController:tweetSheet animated:YES];
}
@end

Ausgabe

Wenn wir die Anwendung ausführen und auf facebookPost klicken, erhalten wir die folgende Ausgabe:

Wenn wir auf twitterPost klicken, erhalten wir die folgende Ausgabe:

Die Speicherverwaltung in iOS war ursprünglich nicht ARC (Automatic Reference Counting), bei dem die Objekte beibehalten und freigegeben werden müssen. Jetzt unterstützt es ARC und wir müssen die Objekte nicht behalten und freigeben. Xcode erledigt den Job automatisch in der Kompilierungszeit.

Speicherverwaltungsprobleme

Gemäß der Apple-Dokumentation sind die beiden Hauptprobleme bei der Speicherverwaltung:

  • Freigeben oder Überschreiben von Daten, die noch verwendet werden. Dies führt zu Speicherbeschädigungen und führt normalerweise zum Absturz Ihrer Anwendung oder schlimmer noch zu beschädigten Benutzerdaten.

  • Wenn Daten, die nicht mehr verwendet werden, nicht freigegeben werden, treten Speicherlecks auf. Wenn der zugewiesene Speicher nicht freigegeben wird, obwohl er nie wieder verwendet wird, spricht man von einem Speicherverlust. Lecks führen dazu, dass Ihre Anwendung immer mehr Speicher belegt, was wiederum zu einer schlechten Systemleistung oder (unter iOS) zum Beenden Ihrer Anwendung führen kann.

Speicherverwaltungsregeln

  • Wir besitzen die Objekte, die wir erstellen, und müssen sie anschließend freigeben, wenn sie nicht mehr benötigt werden.

  • Verwenden Sie Beibehalten, um Eigentümer eines Objekts zu werden, das Sie nicht erstellt haben. Sie müssen diese Objekte auch freigeben, wenn sie nicht benötigt werden.

  • Geben Sie keine Objekte frei, die Sie nicht besitzen.

Umgang mit Speicher in ARC

Sie müssen Release und Retain nicht in ARC verwenden. Daher werden alle Objekte des View Controllers freigegeben, wenn der View Controller entfernt wird. Ebenso werden die Unterobjekte eines Objekts freigegeben, wenn sie freigegeben werden. Beachten Sie, dass die gesamte Klasse nicht freigegeben wird, wenn andere Klassen einen starken Verweis auf ein Objekt einer Klasse haben. Es wird daher empfohlen, schwache Eigenschaften für Delegaten zu verwenden.

Speicherverwaltungstools

Wir können die Speichernutzung mit Hilfe von Xcode-Instrumenten analysieren. Es enthält Tools wie Aktivitätsmonitor, Zuordnungen, Lecks, Zombies usw.

Schritte zum Analysieren von Speicherzuordnungen

Step 1 - Öffnen Sie eine vorhandene Anwendung.

Step 2 - Wählen Sie Produkt und dann Profil wie unten gezeigt.

Step 3 - Wählen Sie im nächsten Bildschirm die Option Zuordnungen und dann Profil.

Step 4 - Wir werden die Zuordnung des Speichers für verschiedene Objekte sehen, wie unten gezeigt.

Step 5 - Sie können zwischen View Controllern wechseln und prüfen, ob der Speicher ordnungsgemäß freigegeben ist.

Step 6 - In ähnlicher Weise können wir anstelle von Zuordnungen den Aktivitätsmonitor verwenden, um den für die Anwendung zugewiesenen Gesamtspeicher anzuzeigen.

Step 7 - Diese Tools helfen uns, auf unseren Speicherverbrauch zuzugreifen und die Stellen zu lokalisieren, an denen mögliche Lecks aufgetreten sind.

Bei der Entwicklung einer Anwendung können Fehler auftreten, die zu verschiedenen Fehlern führen können. Um diese Fehler oder Bugs zu beheben, müssen wir die Anwendung debuggen.

Debugger auswählen

Xcode verfügt über zwei Debugger, nämlich GDB- und LLDB-Debugger. GDB ist standardmäßig ausgewählt. LLDB ist ein Debugger, der Teil des Open-Source-Compilerprojekts LLVM ist. Sie können den Debugger durch die Option "Aktive Schemata bearbeiten" ändern.

Wie finde ich Codierungsfehler?

Um Codierungsfehler zu lokalisieren, müssen Sie Ihre Anwendung erstellen, die den Code kompiliert. Falls der Code Fehler enthält, zeigt der Compiler alle Meldungen, Fehler und Warnungen mit ihren möglichen Gründen an.

Sie können auf Produkt und dann auf Analysieren klicken, um mögliche Probleme in einer Anwendung zu suchen.

Haltepunkte setzen

Haltepunkte helfen uns, die verschiedenen Zustände unserer Anwendungsobjekte zu kennen, wodurch wir viele Fehler identifizieren können, einschließlich logischer Probleme. Wir müssen nur auf die Zeilennummer klicken, um einen Haltepunkt zu erstellen. Um einen Haltepunkt zu entfernen, klicken Sie einfach darauf und ziehen Sie ihn heraus. Der folgende Screenshot zeigt, wie Sie einen Haltepunkt festlegen -

Wenn wir die Anwendung ausführen und die Schaltfläche playVideo auswählen, wird die Anwendung an der Zeilennummer angehalten, an der wir den Haltepunkt festgelegt haben. Dies gibt uns die Zeit, den Status der Anwendung zu analysieren. Wenn der Haltepunkt ausgelöst wird, erhalten wir eine Ausgabe wie unten gezeigt.

Sie können leicht erkennen, welcher Thread den Haltepunkt ausgelöst hat. Unten sehen Sie Objekte wie self, sender usw., die die Werte der entsprechenden Objekte enthalten, und wir können einige dieser Objekte erweitern und den Status jedes dieser Objekte anzeigen.

Um die Anwendung fortzusetzen, wählen Sie die Schaltfläche Weiter (ganz links) im unten gezeigten Debug-Bereich. Die anderen Optionen umfassen Step-In, Step-Out und Step-Over.

Ausnahme-Haltepunkt

Wir haben auch Ausnahme-Haltepunkte, die eine Anwendung auslösen, um an der Stelle anzuhalten, an der die Ausnahme auftritt. Sie können Ausnahme-Haltepunkte einfügen, indem Sie nach Auswahl des Debug-Navigators auf die Schaltfläche + klicken. Sie erhalten das folgende Fenster.

Dann müssen wir Ausnahme-Haltepunkt hinzufügen auswählen, wodurch das folgende Fenster angezeigt wird.

Weitere Informationen zum Debuggen und zu anderen Xcode-Funktionen finden Sie im Xcode 4-Benutzerhandbuch .