Benutzer-Werkzeuge

Webseiten-Werkzeuge


apple:foundation:start

Foundation

Foundation ist das Basis-Framework von Apple für MacOS X und iOS.

Die Klassen von Foundation beginnen i.d.R. mit dem Kürzel „NS“ als Abkürzung für das, von Steve Jobs entwickelte, Betriebssystem NeXTSTEP, auf dessen Komponenten MacOS X basiert.

Hello World

Ein einfaches Programm in Objective-C mit dem Foundation-Framework und NSAutorelasePool:

helloworld.m
#import <Foundation/Foundation.h>
 
int main(int argc, char const *argv[])
{
	NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
 
	NSLog("Hello World!");
 
	[pool drain];
 
	return 0;
}

Logging mit NSLog

Logging einer Variable foo vom Typ NSString:

NSLog(@"foo: %@", foo);

Konstanten

Konstanten sollten mit dem Foundation-Framework als „statische Eigenschaften“ definiert werden, statt über das noch aus C übliche #define (siehe dazu Objective-C: Konstanten).

Für eine statische Eigenschaft wird in der Header-Datei einer Klasse über dem @interface-Block diese mit den Schlüsselwörtern extern und const definiert. Bei der Benennung der Konstanten ist es auch oft üblich diese mit einem kleinen „k“ zu beginnen.

extern NSString * const kFooBar;

In der Implementierungs-Datei wird dann der statischen Eigenschaft ein Wert zugewiesen. Dabei kann dann auf das Schlüsselwort extern verzichtet werden, das Schlüsselwort const muss aber beibehalten werden:

NSString * const kFooBar = @"SomeConstantValue";

Quelle: Stack Overflow: What is the best way to create constants in Objective-C?

Zahlen

Literal

Mit dem Prefix @ kann ein NSNumber-Objekt direkt mit Zahl oder sogar mit einem String initialisiert werden:

NSNumber *number = @42;

Quelle: Clang 3.7: Objective-C Literals

String zu Zahl

Um ein String als Zahl verwenden zu können, muss der String mittels des NSNumberFormatters in eine Zahl vom Typ NSNumber umgewandelt werden:

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
 
numberFormatter.numberStyle = NSNumberFormatterDecimalStyle;
 
NSNumber *foo = [numberFormatter numberFromString:@"42"];

Quelle: Stack Overflow: How to convert an NSString into an NSNumber

Strings

Formatieren

Teile in einem String ersetzten

Um Teile in einem String zu ersetzen gibt es in jedem Objekt der Klasse NSObject die Methode stringByReplacingOccurrencesOfString:withString::

NSString *foo = @"Hello World";
NSString *bar = [foo stringByReplacingOccurrencesOfString:@"World" withString:@"Sky"];
// Hello Sky

Quelle: Stack Overflow: Replace a substring with another substring

Arrays

Definition eines Arrays als „Literal“, mit zwei String-Werten:

NSArray *foobar = @[@"foo", @"bar"];

Durch ein Array mit einem Block iterieren

NSArray *foo = [NSArray arrayWithObjects:@"foo", @"bar", @"foobar", nil];
 
[foo enumerateObjectsUsingBlock:^(id value, NSUInteger index, BOOL *stop) {
	NSLog(@"%lu: %@", index, value);
}];

NSSet in NSArray/NSMutableArray

NSSet *foo = [[NSSet alloc] init]
 
// ...
 
NSMutableArray *foobar = [NSMutableArray arrayWithArray[foo allObjects]];
 
// Alternative:
 
NSMutableArray *barfoo = [[foo allObjects] mutableCopy];

NSDictionary

NSDictionary in NSData konvertieren

NSData *fooData = [NSKeyedArchiver archivedDataWithRootObject:fooDictionary];

NSData in NSDictionary konvertieren

NSDictionary *fooDictionary = (NSDictionary *)[NSKeyedUnarchiver unarchiveObjectWithData:fooData];

Datum/Uhrzeit

Aktuelles Datum und Uhrzeit

Das aktuelle Datum die aktuelle Uhrzeit liefert die Klassen-Methode date der Klasse NSDate:

NSDate *now = [NSDate date]

Daten vergleichen

Daten lassen sich am besten über die Methode compare: der Klasse NSDate vergleichen:

if ( [date1 compare:date2] == NSOrderedSame ) {
	// date1 and date2 are the same
}
 
if ( [date1 compare:date2] == NSOrderedDescending ) {
	// date1 is after/later than date2
}
 
if ( [date1 compare:date2] == NSOrderedAscending ) {
	// date1 is before/earlier than date2
}

Details in der Dokumentation von NSDate.

Quelle: Stack Overflow: How to compare two NSDates: which is more recent?

Timer

NSPredicate

Mit NSPredicate können Daten-Sätze in Arrays oder Sets oder aus Core Data nach Vorgaben gefiltert werden.

apple/foundation/start.txt · Zuletzt geändert: 2015-03-16 12:56 von a.kamola