gpt4 book ai didi

iphone - 如何判断方法错误(Objective C/iPhone/xCode)?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:26:53 26 4
gpt4 key购买 nike

在处理 Mark 和 LeMarche 提供的示例时,我遇到了很多情况,其中事情没有按预期工作。例如,第 4 章讨论了带有图像的“Spiffing up a button”。我似乎无法在按钮上拉伸(stretch)图像,尽管事实上我遵循了原始说明和一些解决方法 [1,2,3]。

如何确定在返回 void 的 Objective C 方法中遇到的错误? (恕我直言,一个无用的范例)。猜测罪魁祸首或错误是浪费时间,而且对我来说效果不佳。

抱歉,我的脾气暴躁 - 我已经无能为力了,我已经厌倦了所有的 printf、NSLog 和猜测。这不是开发程序的方法。

杰夫


[1] Resizing an image with stretchableImageWithLeftCapWidth

[2] stretchableImageWithLeftCapWidth:topCapHeight doesn't work in initWithCoder: of UIImageView subclass

[3] iPhone stretchableImageWithLeftCapWidth only makes "D"s


// Source code from Mark and LeMarch ('Beginning iPhone 4 Programming', Chapter 4, pp. 99-100)
// added for completeness. The same code is presented in 'Beginning iPhone 3 Programming'.
// The button type is 'Custom', and the mode is 'Scale to Fill'. Trying to use TIFFs,
// removing Alpha channels, resizing buttons so their size is image.height+1, etc - no joy.
// The buttons were provided by Apple in their UICatalog example (http://developer.apple.com/library/ios/#samplecode/UICatalog/Introduction/Intro.html).
// I've also tried to assign the image to a single button in case the resource cannot be shared.
// Finally, no ASSERTs fire (and no exceptions are thrown), so all should be OK (yea, right).
- (void)viewDidLoad
{
[super viewDidLoad];

UIImage* whiteButton = [UIImage imageNamed:@"whiteButton.png"];
ASSERT(whiteButton != nil);

UIImage* strechableWhiteButton = [whiteButton stretchableImageWithLeftCapWidth:12.0 topCapHeight:0.0];
ASSERT(strechableWhiteButton != nil);

[changeSrcFileButton setBackgroundImage:strechableWhiteButton forState:UIControlStateNormal];
[changeDestFileButton setBackgroundImage:strechableWhiteButton forState:UIControlStateNormal];

UIImage* blueButton = [UIImage imageNamed:@"blueButton.png"];
ASSERT(blueButton != nil);

UIImage* strechableBlueButton = [blueButton stretchableImageWithLeftCapWidth:12 topCapHeight:0];
ASSERT(strechableBlueButton != nil);

[changeSrcFileButton setBackgroundImage:strechableBlueButton forState:UIControlStateHighlighted];
[changeDestFileButton setBackgroundImage:strechableBlueButton forState:UIControlStateHighlighted];
}

最佳答案

我认为您实际上是在问两个问题:“如何在按钮上拉伸(stretch)图像?”和“当代码不起作用时你会怎么做?”我会先拿前者。以下代码适用于我从头开始创建带有拉伸(stretch)图像的按钮:

UIImage *image = [[UIImage imageNamed:@"ButtonPic"] stretchableImageWithLeftCapWidth:19 topCapHeight:19];
CGRect frame = CGRectMake(80, 200, 160, 40);
UIButton *button = [[UIButton alloc] initWithFrame:frame];
[button setBackgroundImage:image forState:UIControlStateNormal];
[self.view addSubview:button];
[button release];

当然,您需要提供适当的图像。我的图像是在 Photoshop 中创建的 80x40 px PNG 图像,拉伸(stretch)到上面 160 px 的宽度。这是它的样子:

button screenshot

我没有发现我的代码和 the code in the book 之间有任何显着差异.看起来书中的按钮是从 Nib 加载的,而不是以编程方式创建的,但我和他们的按钮都调用 -stretchableImageWithleftCapWidth:topCapHeight: 和 -setBackgroundImage:forState: 来完成相关工作。

这让我们想到了第二个问题:“当代码不起作用时你会怎么做?”

这里没有单一的答案,但首先要做的是尽可能缩小问题的范围。亚瑟柯南道尔写道:“一旦你排除了不可能的,剩下的,无论多么不可能,都一定是真相。”在像这样的案例中,你只有几行代码,一种简单的方法是通过将有问题的代码复制到新项目中来隔离有问题的代码。基于 View 模板创建一个新的 iOS 项目只需要一点时间,您可以将上面的代码粘贴到提供的 View Controller 的 -viewDidLoad 方法中进行尝试。然后您需要做的就是提供图像。如果它仍然不起作用,则说明您已经删除了您应用程序中所有其他可疑的代码。如果确实有效,您可以逐渐从您的应用中添加更多代码,以尝试重现问题并确定原因。将代码移至测试项目并不总是可行,但您通常可以找到简化问题的方法。

就错误而言,请记住,即使每个函数和方法都成功,代码也经常会失败。问题不在于组件,而在于它们的组合方式。

关于iphone - 如何判断方法错误(Objective C/iPhone/xCode)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5268057/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com