BWStream ist eine kostenlose Shoutcast-App für laut.fm.

laut.fm bietet mehrere Hundert Stationen aller bekannten Genres an. Mit BWStream könnt ihr Stationen als Favoriten verwalten, auf Eventim nach Konzerten für den aktuellen Interpreten suchen und den Song direkt im iTunes-Store kaufen.

Weitere Informationen zu BWStream findet ihr auf bwstream.boonweb.de

Herunterladen könnt ihr die App über den AppStore oder unter itunes.apple.com/de/app/bwstream

 

Um eine View von der Superview zu entfernen, haben wir gelernt removeFromSuperview aufzurufen.

[MainView addSubview:mySubView];

Aufruf zum entfernen:

[mySubView removeFromSuperview];

Heute habe ich eine recht nützliche Methode unter subviews gefunden: makeObjectsPerformSelector

Diese Methode ermöglicht es mir, alles subviews von zB. dem ersten gefundenen UIWindow (objectAtIndex:0) zu entfernen. Ein Beispiel könnte so aussehen:

[[[[application windows] objectAtIndex:0] subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];

application ist in diesem Fall eine Objekt-Instanz vom Typ UIApplication.

Wenn also alle Views entfernt werden müssen – zB. zum Speicher einsparen, kann diese Kombination von Methodenaufrufen verwendet werden.

 

Der benannte Fehler hat mich die letzten Tage produktive Arbeitszeit gekostet. Es kann verschiedene Ursachen haben einen solchen Fehler zu erhalten:

2011-01-27 08:54:53.427 App[536:207] <FMDatabase: 0x4b372c0> executeUpdate: BEGIN EXCLUSIVE TRANSACTION;
2011-01-27 08:54:53.428 App[536:207] <FMDatabase: 0x4b372c0> executeUpdate: INSERT INTO `bankContact` (`col1`, `col2`, `col3`, `col4`) VALUES (?, ?, ?, ?);
2011-01-27 08:54:53.429 App[536:207] obj: 1234
2011-01-27 08:54:53.430 App[536:207] obj: 5678
2011-01-27 08:54:53.431 App[536:207] obj: foo
2011-01-27 08:54:53.433 App[536:207] obj: bar
2011-01-27 08:54:53.436 App[536:207] Unknown error calling sqlite3_step (19: constraint failed) eu
2011-01-27 08:54:53.437 App[536:207] DB Query: INSERT INTO `tbl1` (`col1`, `col2`, `col3`, `col4`) VALUES (?, ?, ?, ?);

Gehen wir von diesem (Objective-C)-Quellcode aus:

    self.db = [[FMDatabase alloc] init];
    [self.db open];
    [self.db setTraceExecution:true];
    [self.db beginTransaction];

    if (![self.db executeUpdate:@"INSERT INTO `tbl1` (`col1`, `col2`, `col3`, `col4`) VALUES (?, ?, ?, ?);",
         [NSNumber numberWithInt:1234], [NSNumber numberWithInt:5678], @"foo", @"bar"
    ]) {
        NSAssert(0, @"Failure - i'm not able to save a new row.");
    }

    [self.db commit];
    [self.db close];
    [self.db release];

Der SQL-Befehl ist ja bereits ersichtlich und scheint Fehlerfrei zu sein. Vorrausgesetzt, unsere Datentypen stimmen mit denen des CREATE-Statements überein. Die Datenbankstruktur hat in unserem Fall NUMERIC und VARCHAR-Felder. Wir übergeben für die richtigen Spalten die richtigen Werte. Wenn wir in VALUES den falschen Datentyp übergeben würden, könnte solch ein Fehler erscheinen. Wenn wir jedoch zwei primary keys definieren (zB. col1 & col2) und dann versuchen eine zweite Zeile einzufügen, die bereits gleiche Werte beinhaltet, so kommen wir auch zum obigen Fehler. Man sollte daher NIE NIE NIEmals vergessen, dass man primary keys definiert hat. ;)

Es ist also wahrlich alles, nur keine triviale Fehlermeldung. SQLite3 könnte hier durchaus etwas nachbessern :)

© 2010-2012 RenePardon BoonWeb Suffusion theme by Sayontan Sinha