Objective C Anfänger, brauche Tipps/Hinweise

Reficul

Lieutenant
Registriert
Aug. 2006
Beiträge
525
Hallo Community,

ich möchte eine kleine App für iOS schreiben. Es soll eigentlich nur meine Grundkenntnisse von Objective C erweitern.

Der Gedanke ist wie folgt:
Es gibt drei Screens, auf dem Mainscreen ist eine Map mit Pins drauf, diese markieren zB WOhnorte von Freunden.
AUf dem linken Bildschirm möchte ich etwas wie "Einstellung" haben, da kann man auswählen welche Infos auf der Karte gezeigt werden, etwas wie heißt die Person mit Nachnamen, WLAN-Passwort, Herkunft, wobei das noch offen ist, was da genau hin soll.
Auf dem rechten Screen würde ich gerne eine Möglichkeit haben neue Freunde hinzuzufügen, was die Eingabe von Koordinaten vorraussetzt und Den Information wie Nachname, WLAN, Herkunft.

Nun ist das meine erste Multiscreen App und ich stoße an Grenzen in meinen Kenntnissen und meiner Vorstellung.

Mein Gedanke wäre das es eine externe .txt datei gibt in der die Zeilen ausgelesen werden und so die Infos immer geladen werden.
Dazu habe ich folgende Sachen schon ergoogelt
[[NSString alloc] initWithContentsOfFile:filename];
und
NSArray *lines = [filecontent componentsSeparatedByString:@"\n"];

damit sollen die Daten ausgelesen werden und nach der Auswahl der Einstellung sollen beim Druck auf den Bestätigungsknopf die Pins auf der Map gesetzt werden. Wenn man dann die Einsetllung ändert und wieder bestätigt werden die Pins mit aktualisierten Infos geladen.

Leider kenne ich mich im MVC-Modell noch nicht gut aus und weiß nicht wie ich das genau angehen soll.

Es wäre super wenn ihr mir helfen könntet.
Danke und Gruß
Adrian
 
Sorry, aber warum überlegst du dir nicht erst mal eine App, die du auch in endlicher Zeit fertig stellen kannst? Für mich klingt das nach einem Griff nach den Sternen für einen Anfänger.
Also, nicht bös gemeint, aber ich vermute du bist gerade dabei dich gehörig zu verheben.
 
Weil ich mir das als Endprojekt für das Semster ausgedacht habe. mir ist nichts anderes eingefallen was GPS beinhaltet (war vom Prof vorgegeben) und was ich mir machbar erschien. es muss halt eine App mit drei Usecases sein (hier ort betreten, Einstellungen ändern und weitere Freunde hinzufügen) und etwas mit GPS zu tun haben.

edit: sagen wir es so ich bin kein Blutjunger Anfänger, aber ich würde mich halt nicht als Fortgeschritten bezeichnen. wir haben schon apps mit map und corelocation gemacht. mir macht nur das MVC und die Datei sorgen.
 
Google einfach wie MVC umzusetzen ist und gib dein bestes dich daran zuhalten. Das wird beim ersten Mal wahrscheinlich nicht perfekt, aber hier macht Übung den Meister. Bei konkreten Fragestellungen kannst du dich ja hier wieder ans Forum wenden. Wüsste nicht, was man da jetzt allgemein sonst zu sagen kann.

Bei der Datei musst du dir überlegen, wie du deine Informationen speicherst. Was mir spontan einfallen würde wäre JSON, Protocol Buffers oder ne kleine SQLite DB. Da es hier sicher nicht um max. Performance oder riesige Datenmengen geht würde ich zu JSON raten. Der größte Vorteil für einen Anfänger ist, dass man die Datei auch mit dem Editor öffnen und als Mensch lesen kann. Das hilft beim Debuggen schon ziemlich. Also Library hatte ich dafür zuletzt jsoncpp genutzt und war damit sehr zufrieden. Ich geh doch richtig in der Annahme, dass man in Obj-C C++ Klassen verwenden kann oder?
 
So habe mich nun nach reserche für NSUserDefault entscheiden und gegen CoreData.
Nun habe ich das Problem das meine Pins auf der Map nicht gesetzt werden.

ViewController.m
Code:
//
//  ViewController.m
//  ProjectFriend
//
//  Created by Adrian Laska on 19.06.14.
//  Copyright (c) 2014 Adrian. All rights reserved.
//

#import "ViewController.h"
#import "FriendInfos.h"

@interface ViewController ()

@end

@implementation ViewController
@synthesize map;
@synthesize pin;
@synthesize locMgr;
@synthesize loc;

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    locMgr = [[CLLocationManager alloc] init];
    [self.locMgr setDelegate:self];
    [self.map setShowsUserLocation:YES];
    [locMgr startUpdatingLocation];
    CLLocationCoordinate2D currentLocation = [self.map.userLocation coordinate];
    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(currentLocation, 1000, 1000);
    [map setRegion:region];
    
	// Do any additional setup after loading the view, typically from a nib.
}
-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    //CLEAN MAP
    [self.map removeAnnotations:self.map.annotations];
    
    //LOOP EXISITNG FRIENDS
    for (NSDictionary *friend in FriendAppDelegate.friends) {
        [self initFriendWithDict:friend];
    }
}

-(void) mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
    CLLocationCoordinate2D currentLocation = [userLocation coordinate];
    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(currentLocation, 1000, 1000);
    [map setRegion:region];
}

- (void) locationManager:(CLLocationManager *) manager
     didUpdateToLocation:(CLLocation *)newLocation
            fromLocation:(CLLocation *) oldLocation {
 
    self.map.centerCoordinate = newLocation.coordinate;

    
}

- (void)initFriendWithDict:(NSDictionary*)dict {
    NSLog(@"dict %@", dict);
    //CREATE ANOATION
    FriendInfos *wp = [[FriendInfos alloc] initWithInformation:CLLocationCoordinate2DMake([[dict valueForKey:@"latitude"] doubleValue], [[dict valueForKey:@"longitude"] doubleValue]) wlan:[dict valueForKey:@"wlan"] nachname:[dict valueForKey:@"name"]];
   [self.map addAnnotation:wp];
    [self.map selectAnnotation:wp animated:YES];
}

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

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error

{
	NSLog(@"Fehlerchen");
}


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

@end

FriendInfos.m
Code:
//
//  FriendInfos.m
//  ProjectFriend
//
//  Created by Adrian Laska on 19.06.14.
//  Copyright (c) 2014 Adrian. All rights reserved.
//

#import "FriendInfos.h"

@implementation FriendInfos
@synthesize coordinate, ppw, pnname;

-(id) initWithInformation:(CLLocationCoordinate2D) coord wlan: (NSString*) pw nachname:(NSString *) nname
{
    self = [super init];
    if(self) {
        self->coordinate = coord;
        self.ppw = pw;
        self.pnname = nname;
    }
    return self;
}

-(id) init
{
    return [self initWithInformation:CLLocationCoordinate2DMake(52.20, 13.33)
                                wlan:@"12345"
                            nachname:@"Müller"];
}

@end

Bei initFreindWithDict sollte er den Pin erzeugen, ist meine FreindInfos.m fehlerhaft? kommt er darauf nicht klar das ich zwei Strings übergeben haben möchte? Kann jemand einen Fehler finden?

Ich bin sehr dankbar für jegliche Hilfe.

Gruß Adrian
 
Zurück
Oben