我在选项卡式iPhone / iPad应用程序中使用BWRSS RSS Feed包装器。我使用的是最新的Xcode版本,我也提交并接受了两个版本。第一个工作完美,但第二个工作在iPhone上,但不在iPad上(虽然它被接受)。问题似乎源于具有RSS提要的选项卡。除了一个RSS选项卡之外,所有选项卡都可以在应用程序中正常运行。现在,当我在Ad Hoc中测试它时,单个标签甚至不能使用iPhone版本。(它将与正常的建筑和运行一起使用。)我试图做快照的事情,但现在是已经工作的人已经不在了。我试图改变许多东西来解决它,但似乎没有任何作用。
上个月我曾尝试解决这个问题,但我无法弄明白。我已经使用iPhone配置实用程序来查找崩溃的来源,这里是:
MBBC[5135] <Error>: *** Terminating app due to uncaught exception
'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]:
object cannot be nil'
*** First throw call stack:
(0x32a7a2a3 0x3a7a297f 0x329c48d9 0xa1715
0xa46f7 0xa3e59 0x348e9311 0x348f579b 0x348f54c1
0x348c64e9 0x34885803 0x3462fd8b 0x3462f929 0x3463085d
0x34630243 0x34630051 0x3488b8eb 0x32a4f6cd 0x32a4d9c1
0x32a4dd17 0x329c0ebd 0x329c0d49 0x365992eb 0x348d6301 0x9f87f 0x3abd9b20)
我必须使用iPhone配置实用程序,因为崩溃只发生在Ad Hoc Testing。
以下是打开选项卡时应显示的View控制器的代码。
#import "BWRSSFeedsTableViewController.h"
#import "BWRSSItemsTableViewController.h"
#import "Reachability.h"
@interface BWRSSFeedsTableViewController () {
BOOL iPadIdiom;
NSDictionary * _newFeed;
RSSDB * _rssDB;
NSArray * _feedIDs;
BOOL bannerIsVisible;
}
@end
@implementation BWRSSFeedsTableViewController
- (void) viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
if (UIDevice.currentDevice.userInterfaceIdiom == UIUserInterfaceIdiomPad) iPadIdiom = YES;
[self loadFeedIDs];
[self.tableView reloadData];
}
- (void) viewDidAppear:(BOOL)animated {
if (_newFeed) [self loadNewFeed];
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.title = @"RSS Feeds";
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - Segue delegate
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"SegueToItemTableView"]) {
BWRSSItemsTableViewController * itemsTableViewController = [segue destinationViewController];
NSIndexPath * path = [self.tableView indexPathForSelectedRow];
NSNumber * feedID = _feedIDs[path.row];
itemsTableViewController.currentFeedID = feedID;
itemsTableViewController.rssDB = _rssDB;
}
else if([segue.identifier isEqualToString:@"SegueToAddView"]) {
BWRSSAddViewController *rssAddViewController = [segue destinationViewController];
rssAddViewController.delegate = self;
}
}
#pragma mark - Table View
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
[self loadFeedIDs];
return _feedIDs.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"FeedsCell" forIndexPath:indexPath];
[self loadFeedIDsIfEmpty];
NSDictionary * feedRow = [_rssDB getFeedRow:_feedIDs[indexPath.row]];
cell.textLabel.text = feedRow[@"title"];
cell.detailTextLabel.text = feedRow[@"desc"];
return cell;
}
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
// Return NO if you do not want the specified item to be editable.
return NO;
}
#pragma mark - Database methods
- (void) loadNewFeed {
// NSLog(@"%s", __FUNCTION__);
if (!_newFeed) return;
NSDictionary * newFeed = _newFeed;
_newFeed = nil;
NSNumber * rc = [_rssDB addFeedRow:newFeed];
NSIndexPath * idx = [self indexPathForDBRec:newFeed];
if (rc == nil) { // inserted row in DB
[self.tableView insertRowsAtIndexPaths:@[idx] withRowAnimation:UITableViewRowAnimationLeft];
}
[self.tableView scrollToRowAtIndexPath:idx atScrollPosition:UITableViewScrollPositionNone animated:YES];
if (rc != nil) { // updated existing row in DB
[self.tableView reloadRowsAtIndexPaths:@[idx] withRowAnimation:UITableViewRowAnimationLeft];
}
}
- (NSIndexPath *) indexPathForDBRec:(NSDictionary *) dbRec {
NSNumber * rowID = [_rssDB valueFromQuery:@"SELECT id FROM feed WHERE url = ?", dbRec[@"url"]];
if (rowID) {
NSArray * tempFeedIDs = [_rssDB getFeedIDs];
return [NSIndexPath indexPathForRow:[tempFeedIDs indexOfObject:rowID] inSection:0];
} else {
return nil;
}
}
- (NSArray *) loadFeedIDs {
// NSLog(@"%s", __FUNCTION__);
if (!_rssDB) [self loadFeedDB];
_feedIDs = [_rssDB getFeedIDs];
return _feedIDs;
}
- (NSArray *) loadFeedIDsIfEmpty {
// NSLog(@"%s", __FUNCTION__);
if (!_rssDB) [self loadFeedDB];
if (!_feedIDs || ![_feedIDs count]) _feedIDs = [_rssDB getFeedIDs];
return _feedIDs;
}
- (RSSDB *) loadFeedDB {
// NSLog(@"%s", __FUNCTION__);
// use self.rssDB? or rssDB?
if (!_rssDB) _rssDB = [[RSSDB alloc] initWithRSSDBFilename:@"bwrss.db"];
return _rssDB;
}
@end
请告诉我他们是否还有什么我应该补充的,你们可能需要帮我解决这个非常烦人的问题。 感谢!!!
新的iPhone配置输出:
MBBC[5750] <Error>: *** Terminating app due to uncaught exception
'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil'
*** First throw call stack:
(0x32a7a2a3 0x3a7a297f 0x329c48d9 0xe56c5 0xe86fb 0xe7e5b 0x348e9311 0x348f579b
0x348f54c1 0x348c64e9 0x34885803
0x3462fd8b 0x3462f929 0x3463085d 0x34630243
0x34630051 0x3488b8eb 0x32a4f6cd 0x32a4d9c1 0x32a4dd17
0x329c0ebd 0x329c0d49 0x365992eb 0x348d6301 0xe382f 0x3abd9b20)
Apr 21 12:36:40 iPhone ReportCrash[5752] <Notice>: Formulating crash report for process MBBC[5750]
Apr 21 12:36:40 iPhone com.apple.launchd[1] (UIKitApplication:MBBC.App[0x7a64][5750])
<Warning>: (UIKitApplication:MBBC.App[0x7a64]) Job appears to have crashed: Abort trap: 6
Apr 21 12:36:40 iPhone backboardd[26] <Warning>: Application 'UIKitApplication:MBBC.App[0x7a64]'
exited abnormally with signal 6: Abort trap: 6
Apr 21 12:36:40 iPhone ReportCrash[5752] <Error>: libMobileGestalt
copySystemVersionDictionaryValue: Could not lookup ReleaseType from system version dictionary
我发现它已经崩溃了6件事,但我不确切地知道这意味着什么
图片链接:我不会让我上传到这个网站,虽然我之前上传了图片:https://docs.google.com/file/d/0BxE5vJUTZp7eVWxvRW0wd2pEN2c/edit?usp=sharing
更新:我还尝试从头开始重新启动,只是导入文件并检查每个文件,一个接一个地导入它们
更新2 :我添加了部分故事板的链接。它不会让我上传!!!
更新3 :当我添加异常断点时,我更新了它给我的内容
答案 0 :(得分:1)
为您的项目添加一个异常断点,并查看调用链 - 您肯定会发现问题。最可能的情况是您创建了一些对象,但始终没有对它的强引用,因此系统在某些情况下会在您希望它之前释放它。一个常见的失败路径是在委托方法中指定一个ivar,而不是在一个块中发布一个nil。