• Das kreative Thema des Monats Oktober wird vor allem diejenigen unter Euch besonders ansprechen, denen Do-it-yourself quasi im Blut liegt. Zeigt uns Eure Improvisationskünste oder fotografiert, was andere Leute sich so im Alltag zusammengestrickt haben. --> Zum Mitmachen bitte hier klicken

Wieso ersetzt die Methode "addObject" alle vorherigen Objekte in meinem NSMutableArray?

IceCake97

Gloster
Registriert
03.05.12
Beiträge
63
Hallo!

Ich möchte in ein NSMutableArray den Text von einem Textfeld speichern, also:

[array addObject: myTextField.text];

Drückt man auf einen Button, erscheint ein anderer Text im Textfeld, den man dann wieder ins Array hinzufügen kann.

In einem anderen Textfeld möchte ich diesen Text dann wieder anzeigen:

-(IBAction)naechsterText:(id)sender
{
int count = count + 1;

mySecondTextField.text = [array objectAtIndex:count];
}

Über die Action "naechsterText" erscheint das nächste Objekt aus dem array auf dem Textfeld.

Das funktioniert ganz gut, doch wenn ich später erneut ein Objekt ins array hinzufüge, ersetzt es alle vorherigen Objekte. Mit NSUserDefaults habe ich es auch schon probiert, doch es kommt das gleiche Ergebnis heraus...

Weiß jemand, was man dagegen machen kann?

LG,
IceCake
 
Hallo,
falls es nicht den Rahmen sprengt wäre es vll. ganz hilfreich die entsprechenden Klassen hier zu posten, dann fällt die Fehlversuche etwas leichter :)
 
Hmm... was ist diese count variable?

int count = count + 1;

Ich würde mal debuggen und schauen mit welchem index du jeweils zugreifst.
 
Das ist die entsprechende Klasse:

ViewController.h:


@interface ViewController : UIViewController <MFMailComposeViewControllerDelegate>
{

int count;


NSMutableArray *favoritenArray;
NSMutableArray *favArray;


NSString *witzePath;
NSString *witzeContent;
NSArray *witzeString;
NSString *witzeStringsInOneLine;
}


@property (weak, nonatomic) IBOutlet UITextView *witzeTextField;
@property (weak, nonatomic) IBOutlet UITextView *favoritenTextField;






- (IBAction)nextJoke:(id)sender;
- (IBAction)addFavorit:(id)sender;


- (IBAction)nextFavorit:(id)sender;






ViewController.m:


- (void)viewDidLoad
{
[super viewDidLoad];

count = 0;

favoritenArray = [[NSMutableArray alloc]init ];


favArray = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults]objectForKey:@"FavoritenKey"]];

if ([favArray count] == 0)
{
favoritenTextField.text = @"Du hast noch keine Favoriten gespeichert!";
}
else
{
favoritenTextField.text = [favArray objectAtIndex:0];
}

witzePath = [[NSBundle mainBundle] pathForResource:@"Witze" ofType:@"txt"];

witzeContent = [NSString stringWithContentsOfFile:witzePath encoding:NSUTF8StringEncoding error:NULL];

witzeString = [witzeContent componentsSeparatedByCharactersInSet: [NSCharacterSet newlineCharacterSet]];

witzeStringsInOneLine = [witzeString objectAtIndex:0];

}




- (IBAction)nextJoke:(id)sender
{
count = count + 1;


witzePath = [[NSBundle mainBundle] pathForResource:@"Witze" ofType:@"txt"];

witzeContent = [NSString stringWithContentsOfFile:witzePath encoding:NSUTF8StringEncoding error:NULL];

witzeString = [witzeContent componentsSeparatedByCharactersInSet: [NSCharacterSet newlineCharacterSet]];

witzeStringsInOneLine = [witzeString objectAtIndex:count];

witzeTextView.text = witzeStringsInOneLine;
}


- (IBAction)addFavorit:(id)sender
{
[favoritenArray addObject:FavoriteTextField.text];

[[NSUserDefaults standardUserDefaults] setObject:favoritenArray forKey:@"FavoritenKey"];
}


- (IBAction)nextFavorit:(id)sender
{
count = count + 1;

FavoriteTextField.text = [favArray objectAtIndex:count];
}


Ich habe eine Witze.txt Datei, in der einige Witze gespeichert sind. Mit den Funktionen "WitzePath", "WitzeContent", "WitzeString" und "WitzeStringsInOneLine" lese ich die Textdatei aus und schreibe die Zeile, die dem Wert von "count" entspricht in das Textfeld. Das "favoritenArray" ist das Array, in dem ich den Witz als Favorit speichere und das "favArray" is das Array, in dem ich "favoritenArray" mit NSUserDefaults speichere...

Ich hoffe, dass es jetzt etwas verständlicher ist :-)
LG,
IceCake
 
Hi,
int count = count + 1 // <-- ich frag mich eh warum da der debugger nicht motzt. mache doch hier einfach einmal ein anstatt dem code ein count++.

Du benoetigst ja eine "globale" variable. da du hast hier aber mit "int count" in der methode eine lokale.

Versuch ist es wert. :)

LG, Tobi