• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Einige Blicke in fremde Welten dürft Ihr nun bestaunen und darüber abstimmen, welche davon Euch am meisten gefällt: hier geht es lang für Euer Voting --> Klick

Mein Projekt und ich - Fehleranalyse

vannelle

Erdapfel
Registriert
21.04.11
Beiträge
4
Hallo Apfeltalker,

Da ich im Moment an einem Projekt für eine App arbeite aber wenig Erfahrung bzgl. iOS-Programmierung habe
hoffe ich hier im Forum den ein oder anderen zu finden der mir bei meinen Problemen und Problemen weiterhelfen kann.
Keine Angst, ich habe hier keine Erwartungen dass ich euch sage wie es sein muss und ihr mir dann Code für Copy&Paste liefert ;)
Ich benutze natürlich nebenher Suchfunktionen von Foren weit über Google hinaus und habe auch diverse Bücher und Videotutorials.

Nur helfen die manchmal einfach nicht weiter, weil ich nicht verstehe wo das Problem genau liegt :-P

Und jetzt zu meinem ersten Problem:
Nach dem Auswählen eines Bildes über den ImagePickerController soll das gewählte Bild in einem neuen UIView
geöffnet werden um es dort mit einer Description, evtl. Geo Daten etc. zu versehen.
Der Code dazu:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo
{
UploadModifyViewController *modifyView = [[UploadModifyViewControlleralloc] initWithNibName:@"UploadModifyViewController"bundle:nil];
modifyView = [[UploadModifyViewControlleralloc] init];
[selfdismissModalViewControllerAnimated:NO];
[selfpresentModalViewController:modifyView animated:NO];
[self.navigationControllerpushViewController:modifyView animated:NO]; //Weis nicht ob das nötig ist
modifyView.imageView.image = image;
}

UploadModifyViewController hat als Superklasse UIViewController.

Das Problem: Nach dem pushen des Buttons wird der View zwar geladen, allerdings ist bis auf die Statusbar (die eigentlich per Default ausgeblendet ist) schwarz. Wenn ich in die Methode des UploadModifyViewController: viewDidLoad{} eine PushNotification einbaue,
wird diese auch korrekt ausgegeben, der Hintergrund bleibt trotzdem schwarz.
Btw.: Auch wenn ich das Image im aktuellen View anzeige,
wird nach dem Auswählen die Statusbar wieder angezeigt,
obwohl im Storyboard: Statusbar = None gewählt wurde.
[[UIApplication sharedApplication] setStatusBarHidden:YES];

verbirgt die zwar, aber der View ist danach nicht mehr maximiert -.-

Ich hoffe ihr könnt mir hier erstmal weiterhelfen.

Grüße
Vannelle
 
Zuletzt bearbeitet:
Hallo,

ich verstehe deinen Code nicht so ganz. Hast du deinen ViewController absichtlich doppelt initialisiert? Vielleicht könnte es daran liegen das die xib Datei bei dem geladenen ViewController nicht nachgeladen wird. Außerdem verstehe ich nicht wieso du erst den aktuellen ViewController ausblendest und auf diesem dan noch einen anzeigen lassen willst.

Viele Grüße
H4N5
 
Hallo H4N5,

Die doppelte Initialisierung ist nicht bewusst entstanden :P

bzgl der xib: Ich benutz bei xCode 4.2 das Storyboard, hab da den entsprechenden UploadModifyView aber der Klasse zugeordnet über den Identity Inspector.

Der aktuelle ViewController wird ausgeblendet, weil ich ja in der Methode "picker didFinishPickingImage", sprich ein Bild aus der Library ausgewählt wurde. Jetzt wird die Library ausgeblendet, und ein neuer View mit dem entsprechenden Bild soll geladen werden.

Wie gesagt, ich bin noch sehr neu in dem Metier und das was ich programmiere reime ich mir aus Videotutorials, Büchern etc. zusammen, also
wenn jemand Tipps hat wie ich etwas besser oder effizienter machen kann, oder ich totalen Käse programmier: Immer raus mit der Sprache ;)

Grüße
Vannelle
 
UploadModifyViewController *modifyView = [[UploadModifyViewControlleralloc] initWithNibName:@"UploadModifyViewController"bundle:nil];
Hier erstellst du
a) einen ViewController indem du Speicher für ihn reservierst (alloc) und ihn dann initialisiert. Bei diesem init wird dein Xib geladen.
b) einen Pointer modifyView der auf den eben genannten viewController zeigt.

modifyView = [[UploadModifyViewControlleralloc] init];
Nun erstellst du noch einen ViewController, und biegst den Pointer so um, dass er auf diesen zweiten ViewController zeigt.
Somit hast du keinen Pointer mehr über den du auf den zuerst erstellten ViewController zuzugreifen. Der wäre damit im Nirvana verschollen. ;)

Leider hat der zweite Controller beim init auch keine Xib geladen, weswegen dein Userinterface nicht kommt.

[selfdismissModalViewControllerAnimated:NO];
[selfpresentModalViewController:modifyView animated:NO];

[self.navigationControllerpushViewController:modifyView animated:NO]; //Weis nicht ob das nötig ist
Ist nicht nötig, da ein modaler ViewController nicht in einem NavigationViewcontroller angezeigt wird, sondern Fullscreen.
Es wäre dann nötig, wenn du den View aber eben gerade im NavigationController haben willst.

Dann aber das presentModalViewController weglassen.

modifyView.imageView.image = image;
 
Super. Der letzte Post hat mich auf die richtige Spur geführt ;)
Der Fehler war:
Wenn bei XCode das Storyboard benutzt wird, kann initWithNibName:@"UploadModifyViewController"
nicht mehr benutzt werden, da kein nib mit dem Namen existiert.
Stattdessen habe ich jetzt

UploadModifyViewController *modifyView = [self.storyboardinstantiateViewControllerWithIdentifier:@"UploadModifyViewController"];

benutzt, und im Storyboard dem entsprechenden View als Identifier "UploadModifyViewController" mitgegeben.

Da tauchte jetzt aber das nächste kleine Problem auf: Der neue View wird geladen, allerdings mit Statusbar OBWOHL im Storyboard bei dem View
bzgl. der Statusbar nicht "inferred" sondern "none" ausgewählt wurde. Ich hab das jetzt so gelöst dass ich in der viewDidLoad Methode des UploadModifyViews [[UIApplicationsharedApplication] setStatusBarHidden:YES]; eingebaut habe.

So, das erste Problem ist gelöst, aber ich hab schon ein paar weitere.
Aber da werd ich jetzt erstmal den UploadModifyView bearbeiten.

Grüße
Vannelle
 
So, da ist auch schon wieder ein Problem bei dem ich einfach nicht weis wo der Fehler ist.
Ich hab den ModifyViewController jetzt durch einen NavigationController ersetzt. Das Problem ist nur,
dass ich das ausgewählte image jetzt nicht in mein ImageView des UIViewControllers des NavigationControllers bekomme.

//UploadModifyViewController *modifyView = [self.storyboard instantiateViewControllerWithIdentifier:@"modify1"];
UINavigationController *navControl = [self.storyboardinstantiateViewControllerWithIdentifier:@"navBar1"];
[selfdismissModalViewControllerAnimated:NO];
[selfpresentModalViewController:navControl animated:YES];
//modifyView.imageView.image = image;

Wie man an den auskommentierten Zeilen sieht, habe ich versucht den UploadModifyViewController:UIViewController zu initialisieren, um dann das image an den UIImageView im ViewController zu übergeben. Nur funktioniert das nicht. Ich habe dann getestet das image einfach in einer globalen Variable UIImage *bla in UploadModifyViewController zu speichern (modifyView.bla = image) und dann mittels
modifyView.imageView.image = modifyView.bla; aus dem UploadViewController das image zu setzen.

Ich weis nicht ob ich irgendeinen großen Fehler bei der Übergabe des ImageObjekts mache, oder bei der Initialisierung der Views oder das image in der dementsprechenden Klasse gesetzt werden muss und nicht von einer anderen Klasse aus oder oder oder...
Das mit dem in der eigenen Klasse setzen hab ich im UploadModifyViewController in der viewDidLoad Methode versucht, mit self.imageView.image = bla;

Ich hoffe ihr könnt mir wiedermal weiterhelfen.

Grüße Vannelle


Edit: Ich hab der Übersicht halber mal einen Screenshot aus dem Storyboard gemacht, dass ihr vll eher verstehen könnt was welche Klasse ist
. Bildschirmfoto 2011-11-14 um 17.05.27.png


//edit: Nach einer neuen Idee wollte ich das auch nochmal umbauen und einen TabBarController verwenden, aber hier selbes Problem. Das Image-Objekt kommt nur im ImageView an wenn ich einen einfachen UIView verwende?!
 
Zuletzt bearbeitet: