相关疑难解决方法(0)

在Objective-C中将消息发送到nil

作为正在阅读Apple的Objective-C 2.0文档的Java开发人员:我想知道" 向nil发送消息 "意味着什么 - 更不用说它实际上有用了什么.摘自文档:

Cocoa中有几种模式可以利用这一事实.从消息返回到nil的值也可能是有效的:

  • 如果该方法返回一个对象,任何指针类型,任何大小小于或等于sizeof(void*),float,double,long double或long long的整数标量,则发送给nil的消息返回0 .
  • 如果该方法返回一个结构,如Mac OS X ABI函数调用指南所定义的那样在寄存器中返回,那么发送给nil的消息将为数据结构中的每个字段返回0.0.其他结构数据类型不会用零填充.
  • 如果该方法返回除上述值类型之外的任何内容,则发送到nil的消息的返回值是未定义的.

Java是否让我的大脑无法解释上面的解释?或者是否有一些我想念的东西会让它像玻璃一样清晰?

我确实在Objective-C中得到了消息/接收器的概念,我只是对接收器碰巧感到困惑nil.

objective-c

105
推荐指数
10
解决办法
5万
查看次数

无法捕获视图层次结构

错误:无法捕获视图层次结构.详细信息:日志标题:数据源表达式执行失败.日志详细信息:误差评估表达式"(ID)[[(类)objc_getClass( "DBGTargetHub")sharedHub] performRequestWithRequestInBase64:@ "/ XxATTlNNdXRhYmxlRGljdGlvbmFyeaM + QDxcTlNEaWN0aW9uYXJ5XxAPSW5pdGlhbCByZXF1ZXN0XxAkQ0U4OUY0RkItRkRGRS00RUNGLUIwNzctMUQyNDk1REMzMjRCEAHSODlARaJAPF8QD05TS2V5ZWRBcmNoaXZlctFISVRyb290gAEACAARABoAIwAtADIANwBRAFcAXgBmAHEAeAB/AIEAgwCFAIcAiQCLAJIAlACWAJgAmgCcAJ4AoAC + AN0A9wEYATgBUgFUAVsBYAFiAWQBZgFoAW0BbwFxAXMBdQF3AY0BoQG3AdAB0gHTAdgB2QHbAeAB6wH0AfwB/wIIAg0CIwInAjQCRgJtAm8CdAJ3AokCjAKRAAAAAAAAAgEAAAAAAAAASgAAAAAAAAAAAAAAAAAAApM ="]":错误:执行被中断,原因: EXC_BAD_ACCESS(代码= 1,地址= 0x0).

该过程已返回到表达式评估之前的状态.

xcode9

15
推荐指数
1
解决办法
2646
查看次数

有没有办法在Objective-C中捕获发送到nil的消息?

我刚被一个令人讨厌的bug所困扰,这个bug被Objective-C中的"发送消息给nil确定"行为所掩盖.

我见过发送消息给零?而且共识似乎是'我们如何在Objective-C中滚动'.

现在,也许我没有足够的Objective-C经验,但似乎陷入困境似乎是有用的,因为我无法想到为什么大多数时候应该这样做的一个很好的理由.然而,它可能只是一个我不习惯的编码习语.

所以除了检查nil之外,如此:

assert( object != nil );
[object message];
Run Code Online (Sandbox Code Playgroud)

有没有办法让运行时捕获这种情况,并警告何时object为零?

debugging null objective-c

11
推荐指数
1
解决办法
1071
查看次数

-viewDidLoad未在子类UIViewController中调用

对我有耐心,我还在学习Cocoa Touch.其他-viewDidLoad没被称为问题与我的问题无关,我做了搜索.

我有FooViewController一个UIViewController子类.FooViewController.xib将其File's Owner设置为FooViewController.另外,我有Main,其App代表是MyApplication,其文件所有者是UIApplication.我的主要笔尖设置为Main.

我可以使用此流程(为简洁起见,代码剪切)使视图显示在屏幕上:

UIWindow *main;

-(void)applicationDidFinishLaunching:(UIApplication*)application {
    [self showFooViewController];
    [main makeKeyAndVisible];
}

-(void)showFooViewController {
    fooViewController = [[FooViewController alloc] init];
    if(![[NSBundle mainBundle] loadNibNamed:@"FooViewController" owner:fooViewController options:nil]) {
        DebugF(@"Failed to load FooViewController");
        return;
    }

    // Add the view and put it in place
    UIView *view = [fooViewController view];
    CGRect cur = [view frame];
    cur.origin = CGPointMake(0.0f, 20.0f);
    [view setFrame:cur];

    [main addSubview:[fooViewController view]];
}
Run Code Online (Sandbox Code Playgroud)

但是,此消息未发送到FooViewController:

- (void) viewDidLoad {
    DebugF(@"Hello!"); …
Run Code Online (Sandbox Code Playgroud)

iphone cocoa-touch objective-c

9
推荐指数
1
解决办法
1万
查看次数

UINavigationController未显示Root View控制器

我在视图中有一个大小为320x218的UIView(下面的代码中的menuView).我想在此视图中加载导航控制器.我使用以下代码来做到这一点:

MenuViewController *menuController = [[MenuViewController alloc] initWithNibName:@"MenuViewController" bundle:nil];

UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:menuController];
navigationController.navigationBarHidden = YES;

[menuView addSubview:navigationController.view];
[menuController release];
[navigationController release];
Run Code Online (Sandbox Code Playgroud)

执行时,根视图不会显示在该视图中.仅显示导航栏,其余视图为空.

编辑:

我刚刚在MenuViewController的initWithNibName:和viewDidLoad中放置了一个NSLog().initWithNibName:中的那个被调用但viewDidLoad中的那个:不是:S

更新:

我试图推动menuController我的navigationController想法,因为它没有出现,它可能不在堆栈上.例外:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Pushing the same view controller instance more than once is not supported
Run Code Online (Sandbox Code Playgroud)

iphone uiview uinavigationcontroller ios4

2
推荐指数
1
解决办法
7169
查看次数

presentViewController在Swift中不起作用

谢谢您阅读此篇.我想有一个函数Swift文件,我把我的项目的所有函数放入其中,其他Swift文件可以调用.我试图在函数文件中创建一个警报函数,当我传入一个特定的字符串时,它会显示一个特定的警报.当它在主文件中时它正在工作,但当我将它移动到函数文件时,presentViewController给我一个错误,说"使用未解析的标识符'presentViewController'." 请帮忙!这是我的代码:在函数文件中:

import Foundation
import UIKit

/**********************************************
Variables
***********************************************/
var canTapButton: Bool = false
var tappedAmount = 0

/**********************************************
Functions
***********************************************/

//the alert to ask the user to assess their speed
func showAlert(alert: String) -> Void
{
if(alert == "pleaseAssessAlert")
{
    let pleaseAssessAlert = UIAlertController(title: "Welcome!", message: "If this is your firs time, I encourage you to use the Speed Assessment Tool (located in the menu) to figure which of you fingers is fastest!", preferredStyle: .Alert)
    //ok button
    let okButtonOnAlertAction …
Run Code Online (Sandbox Code Playgroud)

ios presentviewcontroller swift xcode6

2
推荐指数
2
解决办法
1万
查看次数