我在iOS 5模拟器/设备中调试Xcode 4.2时遇到问题.正如预期的那样,以下代码崩溃:
NSArray *arr=[NSArray array];
[arr objectAtIndex:100];
Run Code Online (Sandbox Code Playgroud)
在iOS 4中,我获得了十六进制数的有用堆栈跟踪.但是在iOS 5中,它只是给了我:
*** First throw call stack:
(0x16b4052 0x1845d0a 0x16a0674 0x294c 0x6f89d6 0x6f98a6 0x708743 0x7091f8 0x7fcaa9 0x2257fa9 0x16881c5 0x15ed022 0x15eb90a 0x15eadb4 0x15eaccb 0x6f02a7 0x6faa93 0x2889 0x2805)
Run Code Online (Sandbox Code Playgroud)
谢谢.
在我的应用程序中,我有一个UITableView和一些按钮,用户可以单击这些按钮,根据某些NSDate或int来将数组排序到订单.所以这是我尝试对UITableView进行排序的方法:
- (void)sortStats:(id)sender reloadData:(BOOL)dataBool {
NSSortDescriptor *descriptor = nil;
UIButton *clickedButton = (UIButton*)sender;
if (clickedButton.tag == 1) {
descriptor = [NSSortDescriptor sortDescriptorWithKey:@"Date" ascending:NO];
}
[self.cellArray sortUsingDescriptors:[NSArray arrayWithObject:descriptor]];
[[NSUserDefaults standardUserDefaults] setObject:self.cellArray forKey:@"cellArray"];
if (dataBool) {
[ivstatstableView reloadData];
}
[ivstatstableView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
所以最初我只有没有reloadData参数的方法,因为看起来UITableView上的reloadData导致了崩溃.
这是控制台崩溃日志的内容:
因未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'*** - [__ NSPlaceholderArray initWithObjects:count:]:尝试从对象[0]中插入nil对象
无论如何,这里有任何代码会导致这次崩溃吗?我真的希望在我的应用程序中使用此功能,我知道我已经接近修复它,但我不确定是什么导致了这个问题.
有任何想法吗?
由于我已经安装了最后一个xCode(我之前的版本是3.xx),因此很难调试崩溃的应用程序.实际上,callstack通常是空的.并且显示的方法是
int main(int argc, char *argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, @"MyAppDelegate");
[pool drain];
return retVal;
}
Run Code Online (Sandbox Code Playgroud)
例如:

有没有人注意到这个?它与以前的XCode在同一个项目上完美配合.有什么解决方案吗?
我在我的应用程序中的main.m中遇到应用程序崩溃,并且不知道为什么错误发生,因为xcode没有显示崩溃发生的地方,它显示它在返回时崩溃UIApplicationMain(argc,argv ...)这什么都没告诉我.
有没有办法在Objective-C中使用C++中的try/catch来查看错误发生的确切位置?
当我没有捕获异常时,我习惯于在控制台中出现堆栈跟踪,并将其抛回主函数.在Xcode 4.2中是否有一个我没有的构建设置?现在,它根本没有在控制台中显示任何内容.
我一直在为几个实现多级日志记录的应用程序开发框架.它主要用于内部用于测试与其他设备通信的应用程序,但也用于我们将要分发的一些应用程序中.
有没有办法捕获未捕获的异常并立即执行代码以将异常保存到日志文件中?目前,Log类只是经常写入文件,在写入失败的情况下在两个文件之间交替等等.这样可以正常工作,但是如果它可以看到发生未处理的异常,写入任何未写入的日志会很棒要记录的条目,请注意发生异常并记录其详细信息,然后允许该应用程序崩溃.
如果有一些方法来捕捉应用程序范围内未处理的异常,我会认为它会是这样的:
appDidReceiveUnhandledException:(NSException *)exception
{
//write log to disk
//append exception info to log file
//rethrow exception
}
Run Code Online (Sandbox Code Playgroud)
如果有人能够就这是否可能给我提供见解或建议,我们将不胜感激.
参考:Xcode/LLDB:如何获取有关刚抛出的异常的信息?
因此,我可以通过键入po *(id *)($ebp + 8)调试器控制台来获取异常,并且在断点处有一个选项可以在满足断点时打印某些内容,但该选项只能打印对象的地址而不能打印它的描述.关于调试器命令的选项甚至不打印任何内容po.
是否有任何设置可以自动打印异常描述?
当我使用Facebook登录时,我收到以下错误
是的,这是一个基本的错误"无法识别的选择器发送到实例"但我没有得到错误的地方
[UIStatusBar orientation]: unrecognized selector sent to instance 0xa9a9c00
2012-11-23 11:15:46.854 Tattoo Later[1265:1cd03] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIStatusBar orientation]: unrecognized selector sent to instance 0xa9a9c00'
Run Code Online (Sandbox Code Playgroud)
在这个方法中
- (void)loginToFacebook:(id) loginDelegate
{
fbServiceRequestingobj = loginDelegate;
NSArray* permissions = [[NSArray alloc] initWithObjects:
@"publish_stream",@"user_birthday",@"read_stream",@"user_about_me",@"offline_access",@"email",@"read_mailbox",@"user_about_me",nil];
[facebook authorize:permissions delegate:self];
}
Run Code Online (Sandbox Code Playgroud)
应用程序崩溃在这一行 [facebook authorize:permissions delegate:self];
在我的项目中,我整合了"GPUImage",我正在研究ios6
提前致谢
我希望能够在我的app委托中设置全局函数,以便记录所有未捕获的异常.
有没有办法可以捕获所有未捕获的异常,所以我可以将它们记录到文件中?我已经创建了文件,所以我只需要和方法来调用未处理异常的方法.
以下代码工作正常 - IB连接存在问题; 对于阅读/回答的人
不是一个全职的iOS开发人员而且我正在尝试在当前的indexPath上返回单元格,但这是崩溃而不确定原因.我在单元格上动态保持高度.我的单元格是一个名为MICell的自定义UITableViewCell,我有一个名为height的属性,它在updateCell方法中动态计算.
任何想法,将不胜感激.
#import "MICell.h"
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
MICell *cell = (MICell *)[self tableView:tableView cellForRowAtIndexPath:indexPath];
// hardcoded to 200.0f but still crashing
NSLog(@"here is my height; %f",cell.height);
return 200.0f;
}
Run Code Online (Sandbox Code Playgroud)
作为一种解决方法,我能够创建一个实例变量,然后编写当前的单元格高度,然后在heightForRowAtIndexPath中访问,如下所示.我觉得这可能会做出我不太满意的假设:
@interface ListViewController (){
NSMutableArray *_data;
CGFloat _currentCellHeight;
}
...
-(MICell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"MICell";
MICell *cell = [tableView
dequeueReusableCellWithIdentifier:CellIdentifier
forIndexPath:indexPath];
// Configure the cell here ...
NSDictionary *tmp=[_data objectAtIndex:indexPath.row];
[cell updateCell:tmp];
_currentCellHeight=cell.height;
return cell;
}
-(CGFloat)tableView:(UITableView …Run Code Online (Sandbox Code Playgroud) ios ×7
objective-c ×4
xcode ×4
iphone ×2
uitableview ×2
appdelegate ×1
arrays ×1
build ×1
callstack ×1
datasource ×1
debugging ×1
exception ×1
ios6 ×1
ipad ×1
logging ×1
null ×1
stack ×1
stack-trace ×1
xcode4.2 ×1