我正在编写一个应用程序来显示门户网站的一些新闻。使用来自Internet的JSON文件获取新闻,然后使用CoreData模型将其存储到NSMutableArray中。显然,用户无法从Internet上的JSON文件中删除新闻,但他可以在本地隐藏它们。问题出现在这里,我有以下代码:
I'm writing an application to show some news from a portal. The news are fetched using a JSON file from the Internet and then stored into a NSMutableArray using the CoreData Model. Obviously a user can't delete the news from the JSON file on the Internet, but he can hide them locally. The problems come out here, where I have the following code:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { if (editingStyle == UITableViewCellEditingStyleDelete) { if( !moc ){ moc = [[NewsFetcher sharedInstance] managedObjectContext]; } [[dataSet objectAtIndex:indexPath.row] setEliminata:[NSNumber numberWithBool:YES]]; NSError *error; if( ![moc save:&error] ){ NSLog( @"C'è stato un errore!" ); } [dataSet removeObjectAtIndex:indexPath.row]; [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:YES]; }行:
[dataSet removeObjectAtIndex:indexPath.row];
[dataSet removeObjectAtIndex:indexPath.row];
导致我的应用崩溃出现以下错误:
cause my apps to crash with the following error:
2010-07-12 19:08:16.021 ProvaVideo [284:207] * - [_ PFArray removeObjectAtIndex:]:无法识别的选择器发送到实例0x451c820 2010-07-12 19:08:16.022 ProvaVideo [284:207] * 由于未捕获的异常终止 app 'NSInvalidArgumentException',原因:'*** - [_ PFArray removeObjectAtIndex:]:无法识别的选择器发送到实例 0x451c820 '
2010-07-12 19:08:16.021 ProvaVideo[284:207] * -[_PFArray removeObjectAtIndex:]: unrecognized selector sent to instance 0x451c820 2010-07-12 19:08:16.022 ProvaVideo[284:207] * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[_PFArray removeObjectAtIndex:]: unrecognized selector sent to instance 0x451c820'
我试图理解为什么它不起作用但我不能。 如果我重新启动应用程序,新的内容将被正确地取消。 有什么建议吗?提前致谢。
I'm trying to understand why it doesn't work but I can't. If I re-launch the app, the new is correctly logically cancelled. Any suggestions?? Thanks in advance.
接口:
@interface ListOfVideo : UITableViewController <NSFetchedResultsControllerDelegate> { NSMutableArray *dataSet; } @property (nonatomic, retain) NSMutableArray *dataSet; // In the .m file: @synthesize dataSet;中的初始化viewDidLoad :
dataSet = (NSMutableArray *) [[NewsFetcher sharedInstance] fetchManagedObjectsForEntity:@"News" withPredicate:predicate withDescriptor:@"Titolo"]; [dataSet retain];updateDatabase ...这是在检查时对于来自网络的新消息,我将它们添加到MutableArray中:
updateDatabase ... this is when checking for new news from the net, I add them in the MutableArray:
[dataSet addObject:theNews];推荐答案
您的 NewsFetcher 返回一个不可变数组,而不是一个可变实例。使用以下代码进行初始化:
Your NewsFetcher returns you an immutable array, not a mutable instance. Use the following instead for initialization:
NSArray *results = [[NewsFetcher sharedInstance] fetchManagedObjectsForEntity:@"News" withPredicate:predicate withDescriptor:@"Titolo"]; dataSet = [results mutableCopy];像这样的表达式A * a =(A *)b; 仅将指针强制转换为其他类型 - 它不会转换/更改它指向的实例的实际类型。
An expression like A *a = (A*)b; only casts the pointer to a different type - it doesn't convert/change the actual type of the instance it points to.
更多推荐
NSMutableArray removeObjectAtIndex:抛出无效的参数异常
发布评论