• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> Klick

[NSCFString count]: unrecognized selector sent to instance

nelfisch

Carola
Registriert
15.03.08
Beiträge
108
Hallo Leute,

ich habe in meiner neuen App ein NSDictionary mit Daten befüllt und anschließend in den NSUserDefaults gespeichert. An einer anderen Stelle in meinem Programm möchte ich nun wieder darauf zugreifen. Also schnell die NSUserDefaults per
Code:
NSUserDefaults* prefs = [NSUserDefaults standardUserDefaults];
geholt und mein Dictionary via
Code:
[prefs getObjectForKey:@"startDict"];
ausgelesen. So weit, so gut. Nun habe ich als Values für die Keys immer Arrays gespeichert. Und da hapert es: Ich brauche vorerst einmal nur den
Code:
[myArray count]
dieser Arrays um die Anzahl der Rows in einer Section zu bestimmen. Doch wenn ich das so mache, kommt eine Fehlermeldung á la:
Code:
 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSCFString objectAtIndex:]: unrecognized selector sent to instance 0x29566a8'
Hoffe ich habe mich zumindest leicht verständlich ausgedrückt und ihr könnt das nachvollziehen und mir weiterhelfen :)
Danke!
nelfisch

p.s.: Hier noch mal der ganze Quellcode, vielleicht hilft es ja :)
Code:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
   //getting the NSUserDefaults
	NSUserDefaults* prefs = [NSUserDefaults standardUserDefaults];
	
	// Return the number of rows in the section.
	
	NSLog(@"%@", [[prefs objectForKey:@"startDict"] objectForKey:[HEADING_ARRAY objectAtIndex:section]]); //Kontrolle die 1.
	
	NSDictionary* startDict = [[NSDictionary alloc] initWithDictionary:[prefs objectForKey:@"startDict"]];
	NSArray* testObject = (NSArray*)[startDict objectForKey:[HEADING_ARRAY objectAtIndex:section]];
	
NSLog(@"%@", testObject); // Kontrolle die 2.
	
return [testObject count];
}
 

Poljpocket

Salvatico di Campascio
Registriert
07.01.07
Beiträge
432
Poste mehr Code... zB: Was ist HEADING_ARRAY?

Gruss ppocket
 

nelfisch

Carola
Registriert
15.03.08
Beiträge
108
Code:
#define HEADING_ARRAY [NSArray arrayWithObjects:@"8:05", @"8:20", @"8:35", @"9:50", @"11:05", @"12:40", @"13:05", @"14:30", @"15:45", @"16:00", nil]
Das wird mal ein OVP :)
 

Poljpocket

Salvatico di Campascio
Registriert
07.01.07
Beiträge
432
Ich würd mal sagen, das ist eine schlechte Idee, dieses HEADING_ARRAY mittels define zu machen. Es wäre ja viel einfacher, einfach am Anfang der Daten Folgendes zu schreiben:

Code:
const NSArray *headingArray = [NSArray arrayWithObjects:@"8:05", @"8:20", @"8:35", @"9:50", @"11:05", @"12:40", @"13:05", @"14:30", @"15:45", @"16:00", nil];

Versuch das mal so, und dann poste immer noch mehr Code... In diesem Abschnitt scheint es mir, dass da alles in Ordnung ist, mal abgesehen davon, dass man das schöner so programmieren könnte.

Gruss ppocket
 

nelfisch

Carola
Registriert
15.03.08
Beiträge
108
habe das mit dem Define ausprobiert, hat leider nicht funktioniert. Poste noch mal den Code, wo ich mein Dictionary speicher, was ich dann auslese, da muss irgendwie der Fehler liegen. Bin so langsam am vermuten, dass ich eventuell keine "wirklichen" Arrays als Objekte darin speicher, weil in der Fehlermeldung halt immer von NSCFString die Rede ist...Ach, keine Ahnung! :)
Hier der Code:
Code:
/**************************************
			   Retrieving the data
	***************************************/
	// getting the data from inside of "OVP"  
    NSDictionary *numbers = (NSDictionary *) [data objectForKey:@"OVP"];
	//NSLog(@"%@", numbers);
	NSArray* nummern = [numbers allKeys];
	NSLog(@"%@", nummern);
	
	//Dictionary for beginning times
	NSMutableDictionary* startDict = [[NSMutableDictionary alloc] initWithObjects:[NSArray arrayWithObjects:@"", @"", @"", @"", @"", @"", @"", @"", @"", @"",nil ] forKeys:[NSArray arrayWithObjects:@"8:05", @"8:20", @"8:35", @"9:50", @"11:05", @"12:40", @"13:05", @"14:30", @"15:45", @"16:00", nil]];
							   
	//Strings and Dict for printing in table cells
	NSString* infoString;
	NSString* teacher;
	NSString* time;
	NSString* course;
	NSString* change;
	NSMutableArray* timeArray;
	NSDictionary* numberDict = [[NSDictionary alloc] init];
	for (int i = 0; i < [nummern count]; i++){
		//filling the dictionary and reading the informations into substrings
		numberDict = [numbers objectForKey:[nummern objectAtIndex:i]];
		teacher = [numberDict objectForKey:@"teacher"];
		time = [numberDict objectForKey:@"time"];
		course = [numberDict objectForKey:@"course"];
		change = [numberDict objectForKey:@"change"];
 		
		//building info-String from substrings
		infoString = [NSString stringWithFormat:@" %@    %@     %@", teacher, course, change];
		
		if([timeArray containsObject:time] != TRUE){
			[timeArray addObject:time];
		}
		
		//reading array for given lesson-time from starting dictionary -->sorting of entries
		
		NSArray* addArray = [[NSArray alloc] initWithObjects:[startDict objectForKey:time], nil];
		NSArray* finishArray = [addArray arrayByAddingObject:[NSString stringWithFormat:@"%@",infoString]];
		NSLog(@"%@", finishArray);
		
		[startDict setObject:finishArray forKey:time];
		
		//NSArray* timeArray =  [[NSArray alloc] initWithArray:[startDict objectForKey:time]];
		//[timeArray arrayByAddingObject: teacher];
		//NSLog(@"%@", timeArray);
		
		 //[startDict setObject: timeArray forKey:time];
		
		//NSLog(@"%@", infoString);
	}
	for(int a = 0; a <[timeArray count]; a++){
		if([startDict objectForKey:[timeArray objectAtIndex:a]] != nil){
			NSLog(@"Diese Zeit ist leer: %@", [timeArray objectAtIndex:a]);
		}
	}
	[prefs setObject:startDict forKey:@"startDict"];
	
	
   
	
	// releasing parser  
    [parser release];  
	
	
	//writing to prefs
	[prefs synchronize];
Davor ist lediglich noch die Initialisierung des Parsers, da ist definitiv kein Fehler drin :)