Objective-C,将NSString与NSArray中的计算和数字混合



我有两个阵列windscr并获胜。Windscr保留了描述,Winsize应该保留所需的Windows边界的值。请参阅下面。

Windscr还可以。然而,Winsize在2上显示了一个错误(预期表达式)。我没有这样做,难道根本不允许混合NSSTRING和计算吗?我在做什么错?

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

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];

您有两个问题。

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

第二,NSArray只能容纳Objective-C对象,而NSSize不是Objective-C对象。您可以将NSSize包装在NSValue中,然后将包装器存储在数组中:

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];

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

示例:

...arrayWithObjects:
    @"Auto",
    [NSValue valueWithCGSize:CGSizeMake(2560,4*2560/5)],
    ...

最新更新