Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 目标C,不允许在NSArray中将NSString与计算和数字混合?_Objective C_Nsarray - Fatal编程技术网

Objective c 目标C,不允许在NSArray中将NSString与计算和数字混合?

Objective c 目标C,不允许在NSArray中将NSString与计算和数字混合?,objective-c,nsarray,Objective C,Nsarray,我有两个数组winDscr和winSize。winDscr保存描述,winSize应该保存请求的窗口边界的值。见下文 winDscr目前还可以。但是,winSize在2处显示错误(预期表达式)。包含“{2560,4*2560/5}”的行。我以前从来没有这样做过,难道不允许混合使用字符串和计算吗?我做错了什么 任何线索都会很有帮助的,蒂亚,罗纳德 NSArray *winDscr = [NSArray arrayWithObjects: @"Auto",

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

winDscr目前还可以。但是,winSize在2处显示错误(预期表达式)。包含“{2560,4*2560/5}”的行。我以前从来没有这样做过,难道不允许混合使用字符串和计算吗?我做错了什么

任何线索都会很有帮助的,蒂亚,罗纳德

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对象。NSArray只能容纳对象。在尝试将这些值添加到数组之前,需要将它们保存在一个NSValue中,NSValue中包含一个CGSize(
valueWithCGSize:

例如:

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

这就是我的想法,我的错:)那么花括号呢,在这种情况下允许吗?我在以“First”开头的段落中讨论了花括号。是的,当然,但是valueWithCGSize不被接受,所以我将其改为valueWithSize,这很好。谢谢。我把“[convertMMToPixel:297]”改为“[self-convertMMToPixel:297]”。谢谢,还有一点。我尝试了以下几种方法从winSize数组中检索值:NSInteger theIdx=[sender indexOfSelectedItem];NSValue*theValues=winSizeDimensions[theIdx];它不会抛出错误。但是我如何得到这些值呢?当我记录我的winSize时,我会得到类似这样的文本:“NSSize:{25601440}”、“NSSize:{25602048}”、“NSSize:{25601200}”、“NSSize:{20481536}”,但我如何获得值???就像一个符咒一样工作。)感谢所有人的大力帮助。啊,我理解,但是valueWithCGSize不被接受,所以我将其更改为valueWithSize,这仍然正确吗?我可以为此使用C结构而不是NSArray吗?哦,你在OS X上吗?我猜是iOS。在这种情况下,是的,它也应该是NSSizeMake。@jrturton因为
NSSize
是64位
CGSize
的类型定义,根据项目的不同,两者都可以工作。数组是最好的结构;另一种选择是使用名称作为键、大小作为值的字典,但这取决于您以后对数据所做的操作。