崩溃

2012-09-11 119 views
0

我有以下代码来创建一个NSDictionary,然后检查是否被归档后,其所有值(和自身)是零或不:崩溃

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSString *openbook = [defaults objectForKey:@"OpenBookKey"]; 
NSString *book = [NSString stringWithFormat:@"UploadedWB%@", openbook]; 

Reachability *reachability = [Reachability reachabilityForInternetConnection]; 
NetworkStatus internetStatus = [reachability currentReachabilityStatus]; 
if (internetStatus != NotReachable) { 

[activityIndicator setHidden:NO]; 
[activityIndicator startAnimating]; 

NSLog(@"Sending data to cloud"); 

NSInteger integer = [[defaults objectForKey:@"CurrentIndex"] integerValue]; 

NSArray *paths = NSSearchPathForDirectoriesInDomains 
(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 

NSString *fileName = [NSString stringWithFormat:@"%@/BVAuthors.txt", 
         documentsDirectory]; 

NSString *fileName1 = [NSString stringWithFormat:@"%@/BVImages.txt", 
         documentsDirectory]; 

NSString *fileName2 = [NSString stringWithFormat:@"%@/BVTitles.txt", 
         documentsDirectory]; 

NSMutableArray *authors = [NSMutableArray arrayWithContentsOfFile:fileName]; 
NSMutableArray *images = [NSMutableArray arrayWithContentsOfFile:fileName1]; 
NSMutableArray *titles = [NSMutableArray arrayWithContentsOfFile:fileName2]; 

NSString *author = [authors objectAtIndex:integer]; 
UIImage *image = [images objectAtIndex:integer]; 
NSString *title = [titles objectAtIndex:integer]; 

NSLog(@"Sending %@ by %@", title, author); 

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:_pages, @"pagesarray", _pagessavedbg, @"pagessavedbgarray", author, @"author", image, @"image", title, @"title", nil]; 

// NSLog(@"DICT: %@", dict); 

if([NSKeyedArchiver archivedDataWithRootObject:dict] != NULL) 
{ 

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:dict]; 

NSLog(@"Here the data is used, but it crashes before this point"); 

} 

else 

{ 

    NSLog(@"This is never called :("); 

} 

} 

我总是在[NSKeyedArchiver archivedDataWithRootObject:dict] != NULL上出现故障并出现以下错误:

*** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSArrayM: 0x1e8a8fd0> was mutated while being enumerated.' 
*** First throw call stack: 
(0x38e8c6c3 0x3b0a597f 0x38e8c1a5 0x3b1b0527 0x3b1b02b9 0x3b1af04f 0x3b1b0537 0x3b1ea455 0x3b1af04f 0x3b1ae8f5 0xcfeaf 0x3b24d6bd 0x388dc351 0x388dc218) 
libc++abi.dylib: terminate called throwing an exception 
(lldb) 

为什么会出现这种情况?

回答

1

你在做一个循环吗? (For or while?)。因为看起来的样子:

'*** Collection <__NSArrayM: 0x1e8a8fd0> was mutated while being enumerated.' 

看来是这样。

+0

nope,就在'if(internetStatus!= NotReachable){' –

+0

你能粘贴更多的代码吗? – Peres

+0

查看我更新的问题 –