iPhone Code Schnipsel: Maximale Anzahl Zeichen im UITextField begrenzen

Gegeben

Man hat ein UITextField und möchte verhindern, dass ein User mehr als X Zeichen eingeben kann.

Gesucht

Eine Lösung ohne UIAlertView. Es soll nur verhindert werden, dass weitere Zeichen eingegeben werden.

Lösung

Erstmal zwei Konstanten definieren:

static const NSInteger kUserNameMaxLength = 20;
static const NSInteger kTextFieldNameTag = 1;

Dann entsprechend dem UITextField das Tag zuweisen (static const NSInteger) und den delegate setzen:

textField.tag = kTextFieldTagLimited;
textField.delegate = self;

Dann lässt sich das Problem mit dieser UITextFieldDelegate Methode ziemlich einfach lösen:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
  if (textField.tag == kTextFieldTagLimited) {
    NSString *testString = [textField.text stringByReplacingCharactersInRange:range withString:string];
    if ([testString length] > kUserNameMaxLength) {    
      textField.text = [textField.text substringToIndex:kUserNameMaxLength];
      return NO;
    }
  }
  return YES;
}

Schlüsselwörter: iphone, objective-c, programmierung, schnipsel

Von Stefan Haubold vor 77 Tagen hinzugefügt (0 Kommentare)

iPhone Code Schnipsel: Clang Static Analyzer

Gegeben

Man hat die ersten ViewController fertig, einiges an Logik geschrieben, so dass die Applikation eigentlich ganz gut funktionieren sollte. Der erste Start endet aber im Debugger und nach kurzem Prüfen ist man sich sicher, dass man irgendwo einen Bug im Object-Lifecycle hat - also ein Retain/Release/Autorelease zu viel oder zu wenig.

Gesucht

Ein schneller Weg, diese Fehler zu finden, ohne seinen eigenen Code noch einmal komplett durchgehen zu müssen.

Lösung

Der Clang Static Analyzer: http://clang-analyzer.llvm.org/

Einfach den letzten Build downloaden und entpacken. Am komfortabelsten ist es, wenn man das Verzeichnis gleich dem PATH hinzufügt. Dann in Xcode ein "Clean All Targets" ausführen und auf der Konsole in das Projektverzeichnis wechseln. Dort gibt man folgendes Kommando ein:

scan-build -k -V xcodebuild -configuration Debug -sdk iphonesimulator3.0

Wenn alles klappt, sollte Clang nun das Projekt scannen und am Ende eine Seite im Default Browser öffnen. Dort findet man dann eine Übersicht aller gefunden Fehler, Bugs und Verstöße gegen Coding Conventions. Die Punkte geht man einzeln durch und bekommt wunderbar erklärte Problembeschreibungen. Das sieht dann z.B. so aus:

Als Folge stehen die Chancen gut, dass der nächste Start der neuen App problemlos klappt.

Schlüsselwörter: iphone, objective-c, programmierung, schnipsel, xcode

Von Stefan Haubold vor 411 Tagen hinzugefügt (0 Kommentare)

Ruby Code Schnipsel: default_scopes und named_scopes

Gegeben

Modell mit folgendem Scope:

named_scope :all, 
            :conditions => "status = 'original' or status = 'initial'", 
            :order => "created_at desc" 

Gesucht

Beschränkung der Suchmenge über default_scopes, die mit Ruby on Rails 2.3 eingeführt wurden. Versucht man im aktuellen Rails 2.3.2 einen default_scope mit conditions zusammen mit einem oder mehreren named_scopes zu verwenden, gibt es dabei einen Bug beim Mergen der Scopes. Folgende erster Ansatz funktioniert nicht:

default_scope :conditions => "site_id = Site.current.id"

Stattdessen wird eine Fehlermeldung ausgegeben:

TypeError: can't convert String into Hash
    from /.../vendor/rails/activerecord/lib/active_record/base.rb:2134:in `merge'
    from /.../vendor/rails/activerecord/lib/active_record/base.rb:2134:in `with_scope'
    from /.../vendor/rails/activerecord/lib/active_record/base.rb:2112:in `each'
    from /.../vendor/rails/activerecord/lib/active_record/base.rb:2112:in `inject'
    from /.../vendor/rails/activerecord/lib/active_record/base.rb:2112:in `with_scope'

Auch so geht's nicht:

default_scope :conditions => ["site_id = ?", Site.current.id]

Die Fehlermeldung ist hier TypeError: can't convert Array into Hash bei gleichem Stacktrace.

Lösung

default_scope :conditions => {:site_id => Site.current.id}

Schlüsselwörter: programmierung, ruby on rails, schnipsel

Von Stefan Haubold vor 476 Tagen hinzugefügt (0 Kommentare)

iPhone Code Schnipsel: Kennung des Gerätes

Gesucht

Die Kennung (Identifier bzw. UDID) eines iPhone oder iPod Touch programmatisch ermitteln.

Lösung

UIDevice *device = [UIDevice currentDevice];
NSString *uniqueIdentifier = [device uniqueIdentifier];

UIDevice bietet außerdem Instanzmethoden zur Bestimmung von Name (name) und Modell (model) des Gerätes sowie Name (systemName) und Version (systemVersion) des Betriebssystems. Beispiel für mein iPhone:

Name: MyPhone
Model: iPhone
SystemName: iPhone OS
SystemVersion: 2.2.1

Schlüsselwörter: iphone, programmierung, schnipsel

Von Thomas Dohmke vor 506 Tagen hinzugefügt (0 Kommentare)

iPhone Code Schnipsel: Den Benutzer warten lassen

Gegeben

Der Benutzer füllt seine Benutzerdaten in zwei Textfelder ein und klickt dann auf Login. Anschließend wird ein Request an den Server gesendet und abhängig von der Antwort zum Hauptmenü gewechselt oder eine Fehlermeldung angezeigt.

Gesucht

Während des Wartens auf die Antwort soll die aktuelle Ansicht durch ein HUD mit einem UIActivityIndicatorView überlagert werden.

Lösung

Wir laden die Klasse SFHFHUDView in Form der beiden Dateien SFHFHUDView.h und SFHFHUDView.m von GitHub runter und binden diese in unser Xcode-Projekt ein. Anschließend kann das HUD wie folgt erzeugt und angezeigt

SFHFHUDView *HUDView = [[SFHFHUDView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
[HUDView setStatusText:@"Connecting..."];
[HUDView setShowsStatusLabel:YES];
[HUDView startActivityIndicator];
[HUDView makeKeyAndVisible];

sowie später wieder entfernt werden:

[HUDView resignKeyWindow];
[HUDView setHidden:YES];

Schlüsselwörter: iphone, programmierung, schnipsel

Von Thomas Dohmke vor 507 Tagen hinzugefügt (0 Kommentare)

1 2 3 Ältere Artikel »

Auch abrufbar als: Atom

Twitter

Uns auf Twitter verfolgen: