简体   繁体   English

应用程式当机,无法解释

[英]App is crashing, unexplained

I'm getting these errors in the console: 我在控制台中收到以下错误:

2010-01-07 18:15:19.036 FlagLearner[13310:207] *** -[NSCFString objectForKey:]: unrecognized selector sent to instance 0x3814530
2010-01-07 18:15:19.039 FlagLearner[13310:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSCFString objectForKey:]: unrecognized selector sent to instance 0x3814530'
2010-01-07 18:15:19.047 FlagLearner[13310:207] Stack: (

I have no warnings, no build errors, and no analyzer results whatsoever. 我没有警告,没有构建错误,也没有任何分析器结果。 Yet, it crashes! 然而,它崩溃了! Can anyone figure out why? 谁能找出原因?

Feel free to email me at █████████████@gmail.com if you want me to send you the source to take a look at. 如果您希望我向您发送消息来源以进行查看,请随时通过██████████████@gmail.com给我发送电子邮件。

Here's the implementation file: 这是实现文件:

//
//  RootViewController.m
//  Pop,Cap,Flag!
//
//  Created by Samstrix Apps on 6/01/10.
//  Copyright __MyCompanyName__ 2010. All rights reserved.
//

#import "RootViewController.h"
#import "Pop_Cap_Flag_AppDelegate.h"
#import "DetailViewController.h"


@implementation RootViewController



- (void)viewDidLoad {
    [super viewDidLoad];

    NSLog(@"here1");

    //init array
    listOfItems = [[NSMutableArray alloc] init];
    //add items
NSLog(@"here2");
    NSString *filePathA = [[NSBundle mainBundle] pathForResource:@"A" ofType:@"txt"];
    NSString *myTextA= [NSString stringWithContentsOfFile:filePathA                     encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresA = [myTextA componentsSeparatedByString:@"-"];
NSLog(@"here3");

NSString *filePathB = [[NSBundle mainBundle] pathForResource:@"B" ofType:@"txt"];
NSString *myTextB= [NSString stringWithContentsOfFile:filePathB encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresB = [myTextB componentsSeparatedByString:@"-"];

NSString *filePathC = [[NSBundle mainBundle] pathForResource:@"C" ofType:@"txt"];
NSString *myTextC= [NSString stringWithContentsOfFile:filePathC encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresC = [myTextC componentsSeparatedByString:@"-"];

NSString *filePathD = [[NSBundle mainBundle] pathForResource:@"D" ofType:@"txt"];
NSString *myTextD= [NSString stringWithContentsOfFile:filePathD encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresD = [myTextD componentsSeparatedByString:@"-"];

NSString *filePathE = [[NSBundle mainBundle] pathForResource:@"E" ofType:@"txt"];
NSString *myTextE= [NSString stringWithContentsOfFile:filePathE encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresE = [myTextE componentsSeparatedByString:@"-"];

NSString *filePathF = [[NSBundle mainBundle] pathForResource:@"F" ofType:@"txt"];
NSString *myTextF= [NSString stringWithContentsOfFile:filePathF encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresF = [myTextF componentsSeparatedByString:@"-"];

NSString *filePathG = [[NSBundle mainBundle] pathForResource:@"G" ofType:@"txt"];
NSString *myTextG= [NSString stringWithContentsOfFile:filePathG encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresG = [myTextG componentsSeparatedByString:@"-"];

NSString *filePathH = [[NSBundle mainBundle] pathForResource:@"H" ofType:@"txt"];
NSString *myTextH= [NSString stringWithContentsOfFile:filePathH encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresH = [myTextH componentsSeparatedByString:@"-"];

NSString *filePathI = [[NSBundle mainBundle] pathForResource:@"I" ofType:@"txt"];
NSString *myTextI= [NSString stringWithContentsOfFile:filePathI encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresI = [myTextI componentsSeparatedByString:@"-"];

NSString *filePathJ = [[NSBundle mainBundle] pathForResource:@"J" ofType:@"txt"];
NSString *myTextJ= [NSString stringWithContentsOfFile:filePathJ encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresJ = [myTextJ componentsSeparatedByString:@"-"];

NSString *filePathK = [[NSBundle mainBundle] pathForResource:@"K" ofType:@"txt"];
NSString *myTextK= [NSString stringWithContentsOfFile:filePathK encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresK = [myTextK componentsSeparatedByString:@"-"];

NSString *filePathL = [[NSBundle mainBundle] pathForResource:@"L" ofType:@"txt"];
NSString *myTextL= [NSString stringWithContentsOfFile:filePathL encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresL = [myTextL componentsSeparatedByString:@"-"];

NSString *filePathM = [[NSBundle mainBundle] pathForResource:@"M" ofType:@"txt"];
NSString *myTextM= [NSString stringWithContentsOfFile:filePathM encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresM = [myTextM componentsSeparatedByString:@"-"];

NSString *filePathN = [[NSBundle mainBundle] pathForResource:@"N" ofType:@"txt"];
NSString *myTextN = [NSString stringWithContentsOfFile:filePathN encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresN = [myTextN componentsSeparatedByString:@"-"];

NSString *filePathO = [[NSBundle mainBundle] pathForResource:@"O" ofType:@"txt"];
NSString *myTextO= [NSString stringWithContentsOfFile:filePathO encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresO = [myTextO componentsSeparatedByString:@"-"];

NSString *filePathP = [[NSBundle mainBundle] pathForResource:@"P" ofType:@"txt"];
NSString *myTextP= [NSString stringWithContentsOfFile:filePathP encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresP = [myTextP componentsSeparatedByString:@"-"];

NSString *filePathQ = [[NSBundle mainBundle] pathForResource:@"Q" ofType:@"txt"];
NSString *myTextQ= [NSString stringWithContentsOfFile:filePathQ encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresQ = [myTextQ componentsSeparatedByString:@"-"];

NSString *filePathR = [[NSBundle mainBundle] pathForResource:@"R" ofType:@"txt"];
NSString *myTextR= [NSString stringWithContentsOfFile:filePathR encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresR = [myTextR componentsSeparatedByString:@"-"];

NSString *filePathS = [[NSBundle mainBundle] pathForResource:@"S" ofType:@"txt"];
NSString *myTextS= [NSString stringWithContentsOfFile:filePathS encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresS = [myTextS componentsSeparatedByString:@"-"];

NSString *filePathT = [[NSBundle mainBundle] pathForResource:@"T" ofType:@"txt"];
NSString *myTextT= [NSString stringWithContentsOfFile:filePathT encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresT = [myTextT componentsSeparatedByString:@"-"];

NSString *filePathU = [[NSBundle mainBundle] pathForResource:@"U" ofType:@"txt"];
NSString *myTextU= [NSString stringWithContentsOfFile:filePathU encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresU = [myTextU componentsSeparatedByString:@"-"];

NSString *filePathV = [[NSBundle mainBundle] pathForResource:@"V" ofType:@"txt"];
NSString *myTextV= [NSString stringWithContentsOfFile:filePathV encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresV = [myTextV componentsSeparatedByString:@"-"];

NSString *filePathW = [[NSBundle mainBundle] pathForResource:@"W" ofType:@"txt"];
NSString *myTextW= [NSString stringWithContentsOfFile:filePathW encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresW = [myTextW componentsSeparatedByString:@"-"];
//none with "X"
//NSString *filePathX = [[NSBundle mainBundle] pathForResource:@"X" ofType:@"txt"];
//NSString *myTextX= [NSString stringWithContentsOfFile:filePathX encoding:NSUTF8StringEncoding error:nil];
//NSArray *arrayStructuresX = [myTextX componentsSeparatedByString:@"-"];

NSString *filePathY = [[NSBundle mainBundle] pathForResource:@"Y" ofType:@"txt"];
NSString *myTextY= [NSString stringWithContentsOfFile:filePathY encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresY = [myTextY componentsSeparatedByString:@"-"];

NSString *filePathZ = [[NSBundle mainBundle] pathForResource:@"Z" ofType:@"txt"];
NSString *myTextZ= [NSString stringWithContentsOfFile:filePathZ encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresZ = [myTextZ componentsSeparatedByString:@"-"];

NSLog(@"here4");

NSLog(@"here5");








[listOfItems addObjectsFromArray:arrayStructuresA];
[listOfItems addObjectsFromArray:arrayStructuresB];
[listOfItems addObjectsFromArray:arrayStructuresC];
[listOfItems addObjectsFromArray:arrayStructuresD];
[listOfItems addObjectsFromArray:arrayStructuresE];
[listOfItems addObjectsFromArray:arrayStructuresF];
[listOfItems addObjectsFromArray:arrayStructuresG];
[listOfItems addObjectsFromArray:arrayStructuresH];
[listOfItems addObjectsFromArray:arrayStructuresI];
[listOfItems addObjectsFromArray:arrayStructuresJ];
[listOfItems addObjectsFromArray:arrayStructuresK];
[listOfItems addObjectsFromArray:arrayStructuresL];
[listOfItems addObjectsFromArray:arrayStructuresM];
[listOfItems addObjectsFromArray:arrayStructuresN];
[listOfItems addObjectsFromArray:arrayStructuresO];
[listOfItems addObjectsFromArray:arrayStructuresP];
[listOfItems addObjectsFromArray:arrayStructuresQ];
[listOfItems addObjectsFromArray:arrayStructuresR];
[listOfItems addObjectsFromArray:arrayStructuresS];
[listOfItems addObjectsFromArray:arrayStructuresT];                                                     
[listOfItems addObjectsFromArray:arrayStructuresU]; 
[listOfItems addObjectsFromArray:arrayStructuresV];
[listOfItems addObjectsFromArray:arrayStructuresW]; 
//  [listOfItems addObjectsFromArray:arrayStructuresX]; 
[listOfItems addObjectsFromArray:arrayStructuresY]; 
[listOfItems addObjectsFromArray:arrayStructuresZ]; 



//set the titles
self.navigationItem.title = @"Countries";   
NSLog(@"here6");

//[StartWithA addObjectFromArray:arrayStructuresA];
NSLog(@"here6.5");





NSDictionary *StartWithADict = [NSDictionary dictionaryWithObject:arrayStructuresA forKey:@"Countries"];

NSLog(@"here7");
//NSDictionary *countriesToLiveInDict = [NSDictionary dictionaryWithObject:countriesToLiveInArray forKey:@"Countries"];

//[StartWithB addObjectsFromArray:arrayStructuresB];
NSDictionary *StartWithBDict = [NSDictionary dictionaryWithObject:arrayStructuresB forKey:@"Countries"];

//[StartWithC addObjectsFromArray:arrayStructuresC];
NSDictionary *StartWithCDict = [NSDictionary dictionaryWithObject:arrayStructuresC forKey:@"Countries"];

//  [StartWithD addObjectsFromArray:arrayStructuresD];
NSDictionary *StartWithDDict = [NSDictionary dictionaryWithObject:arrayStructuresD forKey:@"Countries"];

//  [StartWithE addObjectsFromArray:arrayStructuresE];
NSDictionary *StartWithEDict = [NSDictionary dictionaryWithObject:arrayStructuresE forKey:@"Countries"];

//[StartWithF addObjectsFromArray:arrayStructuresF];
NSDictionary *StartWithFDict = [NSDictionary dictionaryWithObject:arrayStructuresF forKey:@"Countries"];

//  [StartWithG addObjectsFromArray:arrayStructuresG];
NSDictionary *StartWithGDict = [NSDictionary dictionaryWithObject:arrayStructuresG forKey:@"Countries"];

//  [StartWithH addObjectsFromArray:arrayStructuresH];
NSDictionary *StartWithHDict = [NSDictionary dictionaryWithObject:arrayStructuresH forKey:@"Countries"];

//  [StartWithI addObjectsFromArray:arrayStructuresI];
NSDictionary *StartWithIDict = [NSDictionary dictionaryWithObject:arrayStructuresI forKey:@"Countries"];

//  [StartWithJ addObjectsFromArray:arrayStructuresJ];
NSDictionary *StartWithJDict = [NSDictionary dictionaryWithObject:arrayStructuresJ forKey:@"Countries"];

//  [StartWithK addObjectsFromArray:arrayStructuresK];
NSDictionary *StartWithKDict = [NSDictionary dictionaryWithObject:arrayStructuresK forKey:@"Countries"];

//[StartWithL addObjectsFromArray:arrayStructuresL];
NSDictionary *StartWithLDict = [NSDictionary dictionaryWithObject:arrayStructuresL forKey:@"Countries"];

//  [StartWithM addObjectsFromArray:arrayStructuresM];
NSDictionary *StartWithMDict = [NSDictionary dictionaryWithObject:arrayStructuresM forKey:@"Countries"];


//[StartWithN addObjectsFromArray:arrayStructuresN];
NSDictionary *StartWithNDict = [NSDictionary dictionaryWithObject:arrayStructuresN forKey:@"Countries"];

//  [StartWithO addObjectsFromArray:arrayStructuresO];
NSDictionary *StartWithODict = [NSDictionary dictionaryWithObject:arrayStructuresO forKey:@"Countries"];

//  [StartWithP addObjectsFromArray:arrayStructuresP];
NSDictionary *StartWithPDict = [NSDictionary dictionaryWithObject:arrayStructuresP forKey:@"Countries"];


//  [StartWithQ addObjectsFromArray:arrayStructuresQ];
NSDictionary *StartWithQDict = [NSDictionary dictionaryWithObject:arrayStructuresQ forKey:@"Countries"];

//[StartWithR addObjectsFromArray:arrayStructuresR];
NSDictionary *StartWithRDict = [NSDictionary dictionaryWithObject:arrayStructuresR forKey:@"Countries"];

//  [StartWithS addObjectsFromArray:arrayStructuresS];
NSDictionary *StartWithSDict = [NSDictionary dictionaryWithObject:arrayStructuresS forKey:@"Countries"];

/// [StartWithT addObjectsFromArray:arrayStructuresT];
NSDictionary *StartWithTDict = [NSDictionary dictionaryWithObject:arrayStructuresT forKey:@"Countries"];

//  [StartWithU addObjectsFromArray:arrayStructuresU];
NSDictionary *StartWithUDict = [NSDictionary dictionaryWithObject:arrayStructuresU forKey:@"Countries"];

//  [StartWithV addObjectsFromArray:arrayStructuresV];
NSDictionary *StartWithVDict = [NSDictionary dictionaryWithObject:arrayStructuresV forKey:@"Countries"];

//  [StartWithW addObjectsFromArray:arrayStructuresW];
NSDictionary *StartWithWDict = [NSDictionary dictionaryWithObject:arrayStructuresW forKey:@"Countries"];

//NSMutableArray *StartWithX;
//[StartWithX addObjectsFromArray:arrayStructuresX];
//NSDictionary *StartWithXDict = [NSDictionary dictionaryWithObject:arrayStructuresX forKey:@"Countries"];

//  [StartWithY addObjectsFromArray:arrayStructuresY];
NSDictionary *StartWithYDict = [NSDictionary dictionaryWithObject:arrayStructuresY forKey:@"Countries"];

//  [StartWithZ addObjectsFromArray:arrayStructuresZ];
NSDictionary *StartWithZDict = [NSDictionary dictionaryWithObject:arrayStructuresZ forKey:@"Countries"];
NSLog(@"Here8");

[listOfItems addObject:StartWithADict];
[listOfItems addObject:StartWithBDict];
[listOfItems addObject:StartWithCDict];
[listOfItems addObject:StartWithDDict];
[listOfItems addObject:StartWithEDict];
[listOfItems addObject:StartWithFDict];
[listOfItems addObject:StartWithGDict];
[listOfItems addObject:StartWithHDict];
[listOfItems addObject:StartWithIDict];
[listOfItems addObject:StartWithJDict];
[listOfItems addObject:StartWithKDict];
[listOfItems addObject:StartWithLDict];
[listOfItems addObject:StartWithMDict];
[listOfItems addObject:StartWithNDict];
[listOfItems addObject:StartWithODict];
[listOfItems addObject:StartWithPDict];
[listOfItems addObject:StartWithQDict];
[listOfItems addObject:StartWithRDict];
[listOfItems addObject:StartWithSDict];
[listOfItems addObject:StartWithTDict];
[listOfItems addObject:StartWithUDict];
[listOfItems addObject:StartWithVDict];
[listOfItems addObject:StartWithWDict];
//[listOfItems addObject:StartWithXDict];
[listOfItems addObject:StartWithYDict];
[listOfItems addObject:StartWithZDict];
NSLog(@"Here9");

// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
}   

- (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}



#pragma mark Table view methods

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    NSLog(@"Here10");
    NSLog(@"%d", [listOfItems count]);
    return [listOfItems count];


}

//this sets the number of row in the table view, by couting the number of objects (countries) in the array//
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    NSLog(@"Here12");


    //Number of rows it should expect should be based on the section
    NSDictionary *dictionary = [listOfItems objectAtIndex:section];
    NSArray *array = [dictionary objectForKey:@"Countries"];
    NSLog(@"this is the array count - %d", [array count]);
    return [array count];
    NSLog(@"Here13");

}// Customize the number of rows in the table view.


// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"Here14");

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
    }

    // Configure the cell.
    NSDictionary *dictionary = [listOfItems objectAtIndex:indexPath.section];
    NSArray *array = [dictionary objectForKey:@"Countries"];
    NSString *cellValue = [array objectAtIndex:indexPath.row];
    [cell.textLabel setText:cellValue];


    //NSString *cellValue = [listOfItems objectAtIndex:indexPath.row];
    //[cell.textLabel setText:cellValue];
    //[cell.textLabel setText:cellValue];
    NSLog(@"Here15");


    return cell;

    //NSLog(cellValue);
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section     {
NSLog(@"Here16");
if (section == 0) {
    return @"A";
}

if (section == 1) {
    return @"B";
}
if (section == 2) {
    return @"C";
}
if (section == 3) {
    return @"D";
}
if (section == 4) {
    return @"E";
}
if (section == 5) {
    return @"F";
}
if (section == 6) {
    return @"G";
}
if (section == 7) {
    return @"H";
}
if (section == 8) {
    return @"I";
}
if (section == 9) {
    return @"J";
}
if (section == 10) {
    return @"K";
}
if (section == 11) {
    return @"L";
}
if (section == 12) {
    return @"M";
}
if (section == 13) {
    return @"N";
}
if (section == 14) {
    return @"O";
}
if (section == 15) {
    return @"P";
}
if (section == 16) {
    return @"Q";
}

if (section == 17) {
    return @"R";
}
if (section == 18) {
    return @"S";
}
if (section == 19) {
    return @"T";
}
if (section == 20) {
    return @"U";
}
if (section == 21) {
    return @"V";
}

if (section == 22) {
    return @"W";
}
//if (section==0) {
    //return @"X";
//}
if (section == 23) {
    return @"Y";
}
if (section == 24) {
    return @"Z";
}

return @"";

//NSLog(@"%d", [listOfItems count]);



NSLog(@"That whole error thing");
}


- (UITableViewCellAccessoryType)tableView:(UITableView *)tableView accessoryTypeForRowWithIndexPath:(NSIndexPath *)indexPath{
NSLog(@"Here17");

return UITableViewCellAccessoryDisclosureIndicator;
}

// Override to support row selection in the table view.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"Here18");

    //Get the selected country

    NSDictionary *dictionary = [listOfItems objectAtIndex:indexPath.section];
    NSArray *array = [dictionary objectForKey:@"Countries"];
    NSString *selectedCountry = [array objectAtIndex:indexPath.row];

    //Initialize the detail view controller and display it.
    DetailViewController *dvController = [[DetailViewController alloc] initWithNibName:@"DetailView" bundle:[NSBundle mainBundle]];
    dvController.selectedCountry = selectedCountry;
    [self.navigationController pushViewController:dvController animated:YES];
    [dvController release];
    dvController = nil;
    /*
    NSString *selectedCountry = [listOfItems objectAtIndex:indexPath.row];
    //init the detail view controller and display it. 
    DetailViewController *dvController = [[DetailViewController alloc] initWithNibName:@"DetailView" bundle:[NSBundle mainBundle]];
    dvController.selectedCountry = selectedCountry;
    [self.navigationController pushViewController:dvController animated:YES];
    [dvController release];
    dvController = nil;
    */

    // Navigation logic may go here -- for example, create and push another view controller.
    // AnotherViewController *anotherViewController = [[AnotherViewController alloc] initWithNibName:@"AnotherView" bundle:nil];
    // [self.navigationController pushViewController:anotherViewController animated:YES];
    // [anotherViewController release];
    NSLog(@"Here19");

}

- (void)dealloc {
    //dealloc the array
    [listOfItems release];
    NSLog(@"Here20");

    [super dealloc];
}


@end

The error message is a bit cryptic, but it basically says that you tried to send the message "objectForKey:" to an object of class "NSString", and that method doesn't exist in the NSString class. 该错误消息有点神秘,但是它基本上表明您尝试将消息“ objectForKey:”发送到类“ NSString”的对象,并且该方法在NSString类中不存在。 It sounds like you're programatically grabbing an object and expecting that object to be an NSDictionary. 听起来您正在以编程方式抓取一个对象,并希望该对象成为NSDictionary。 At runtime, your NSDictionary * is actually being set to an NSString *, and you don't get an exception until that object is actually used incorrectly. 在运行时,实际上将您的NSDictionary *设置为NSString *,并且在该对象未被正确使用之前,您不会得到任何异常。

The fact that you can say "give me this object of unknown type, assume it's a dictionary, and call this function" is actually pretty cool once you get comfortable with Objective-C, but it's hell to get used to. 熟悉Objective-C后,您可以说“给我这个未知类型的对象,假定它是一个字典,然后调用此函数”,这一事实实际上很酷,但是要习惯它是很困难的。 I've always found that Objective-C assumes you know what you're doing. 我一直发现,Objective-C假定您知道自己在做什么。 Some people love it because it lets them write clean, concise code -- but it raises the learning curve quite a bit. 有些人喜欢它,因为它使他们可以编写简洁明了的代码-但它会大大提高学习难度。

Feel free to post a code snippet if you need more help tracking this one down! 如果您需要更多帮助来跟踪此代码段,请随时发布代码段!

  • Ben

UPDATE: 更新:

It looks like when you setup your data in viewDidLoad:, you are loading a bunch of arrays from separate files. 看起来当您在viewDidLoad:中设置数据时,您正在从单独的文件加载一堆数组。 Then you add the contents of those arrays to your main data array like this: 然后将这些数组的内容添加到主数据数组中,如下所示:

[listOfItems addObjectsFromArray:arrayStructuresF];

I think those lines shouldn't be there. 我认为这些行不应该在那里。 Further down, you're creating dictionaries for each letter and then adding those to the listOfItems. 再往下,你要创建的每个字母的字典,然后加入那些到LISTOFITEMS。 At the end of the function, listOfItems contains a whole bunch of string items AND a whole bunch of dictionaries. 在函数末尾,listOfItems包含一堆字符串项目和一堆字典。 The string items come first, so you're getting NSStrings when you expect NSDictionaries. 字符串项排在第一位,因此当您期望使用NSDictionaries时会得到NSStrings。

PS You might want to condense some of this into loops once it's all working. PS:您可能希望将其中的一些压缩成循环。 You could create an array of the letters A,B,C,D, etc... and then load all the files in a loop using filenames made using NSString's stringWithFormat:. 您可以创建一个由字母A,B,C,D等组成的数组,然后使用使用NSString的stringWithFormat:创建的文件名循环加载所有文件。 Just a thought! 只是一个想法!

The object at 0x3814530 is a NSString and yet you treat it as a NSDictionary, and you get a runtime exception. 0x3814530处的对象是NSString,但是您将其视为NSDictionary,但是会遇到运行时异常。

This article describes breaking on exceptions. 本文介绍了打破异常。 Use the debugger to inspect the code that is adjacent to your exception. 使用调试器检查与您的异常相邻的代码。

Try turning on NSZombiesEnabled. 尝试打开NSZombiesEnabled。

  1. Double-click your executable in the Executable group of your project. 在项目的“可执行文件”组中双击您的可执行文件。
  2. Click the Arguments tab. 单击参数选项卡。
  3. In the "Variables to be set in the environment:" section, create a new variable called NSZombieEnabled and set it to YES. 在“要在环境中设置的变量:”部分中,创建一个名为NSZombieEnabled的新变量,并将其设置为YES。

I'm betting you'll find you're sending a message to an object that's already been released to the point that it's been deallocated. 我敢打赌,您会发现您正在向已释放的对象发送一条消息,以至于该消息已被释放。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM