1

我有两个数组 winDscr 和 winSize。winDscr 保存描述,而 winSize 应该保存请求的窗口边界的值。见下文。

到目前为止,winDscr 还可以。然而,winSize 在包含“{2560,4*2560/5}”的 2. 行显示错误(预期表达式)。我以前没有这样做过,根本不允许混合 NSString 和计算吗?我究竟做错了什么?

任何线索都会非常有帮助,蒂亚,罗纳德。

NSArray *winDscr = [NSArray arrayWithObjects:
                   @"Auto",
                   @"2560-> 5:4",
                   @"2560->16:10",
                   @"2048-> 4:3",
                   @"1920-> 4:3",
                   @"1920->16:10",
                   @"A2 Portrait",
                   @"A2 Landscape",
                   @"A3 Portrait",
                   @"A3 Landscape",
                   nil];

NSArray *winSize = [NSArray arrayWithObjects:
                   @"Auto",
                   {2560,4*2560/5},
                   {2560,10*1920/16},
                   {2048,3*2048/4},
                   {1920,3*1920/4},
                   {1920,10*1920/16},
                   {[convertMMToPixel:420],[convertMMToPixel:594]},
                   {[convertMMToPixel:594],[convertMMToPixel:420]},
                   {[convertMMToPixel:297],[convertMMToPixel:420]},
                   {[convertMMToPixel:420],[convertMMToPixel:297]},
                   nil];
4

2 回答 2

2

你有两个问题。

首先,{2560,4*2560/5}它本身不是一个有效的表达式。您可以通过编写使其成为文字NSSize表达式(NSSize){2560,4*2560/5}。您也可以编写NSMakeSize(2560, 4*2560/5),它使用库函数。

其次,anNSArray只能保存 Objective-C 对象,而 aNSSize不是 Objective-C 对象。您可以将包装器包装起来并将包装器存储在数组中NSSizeNSValue

NSArray *winSize = [NSArray arrayWithObjects:
                   @"Auto",
                   [NSValue valueWithSize:(NSSize){2560,4*2560/5}],
                   [NSValue valueWithSize:(NSSize){2560,10*1920/16}],
                   ...

要提取大小:

NSValue *wrapper = winSize[2];
NSSize size = [wrapper sizeValue];
于 2012-10-20T06:16:11.177 回答
0

{2560,4*2560/5}是具有两个成员的 C 结构,而不是 Objective-C 对象。NSArrays 只能保存对象。valueWithCGSize:在尝试将这些值添加到数组之前,您需要将这些值保存在持有 CGSize ( ) 的 NSValue 中。

例子:

...arrayWithObjects:
    @"Auto",
    [NSValue valueWithCGSize:CGSizeMake(2560,4*2560/5)],
    ...
于 2012-10-20T06:18:50.327 回答