我使用NSSize时遇到问题

时间:2010-07-31 03:02:49

标签: objective-c

我正在Aaron Hillegass的书“Cocoa Programming for Mac”中进行挑战练习。 我要做的是将窗口调整为宽度高度的两倍。到目前为止,这是我的代码。

#import "AppController.h"


@implementation AppController

-(id) init
{
    [super init];
    NSLog(@"init");
    [window setDelegate:self];
    return self;
}

-(NSSize) windowWillResize:(NSWindow*) sender
toSize:(NSSize)frameSize
{
    int x;
    NSSize mySize;
    mySize.width = x;
    mySize.height = 2*x;
    NSLog(@"mySize is %f wide and %f tall",mySize.width,mySize.height);
    return mySize;
}

这不能按预期工作我确定我没有正确使用NSSize类型。我不知道很多C,所以使用结构是我认为我犯了错误。

ADDENDUM:我将上面的代码更改为以下内容。我知道我正在传递一个NSSize,因此没有理由创建另一个(即mySize)。但是,我不明白为什么这样做。有人可以解释一下。

#import "AppController.h"


@implementation AppController

-(id) init
{
    [super init];
    NSLog(@"init");
    [window setDelegate:self];
    return self;
}



-(NSSize) windowWillResize:(NSWindow*) sender
toSize:(NSSize)frameSize
{
    //float x = 100;
    //NSSize mySize;
    //mySize.width = x;
    //mySize.height = x * 2;
    //NSLog(@"mySize is %f wide and %f tall",mySize.width,mySize.height);
    NSLog(@"mySize is %f wide and %f tall",frameSize.width,frameSize.height);
    return NSMakeSize(frameSize.width, frameSize.width * 2);

}
@end

2 个答案:

答案 0 :(得分:1)

让我们考虑一下你想要mySize的内容。

  • 您希望其宽度与frameSize.width
  • 相同
  • 您希望其高度为frameSize.width * 2

现在让我们看看你对x所做的事情:

  • 您将mySize.width设为等于
  • 您将mySize.height设为x * 2

由此我们可以得出结论:

您想将x设置为frameSize.width

或者,整个方法可以是return NSMakeSize(frameSize.width, frameSize.width * 2)

答案 1 :(得分:0)

您应该为x分配初始值:

int x = 100;

否则,结果未定义。