• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Die Bildungsoffensive hier im Forum geht weiter! Jetzt sollen Kreativität und technische Möglichkeiten einen neue Dimension erreichen. Das Thema in diesem Monat lautet - Verkehrte Welt - Hier geht es lang --> 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];
}
 
Poste mehr Code... zB: Was ist HEADING_ARRAY?

Gruss ppocket
 
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 :)
 
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
 
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 :)