Objective c 目标C,为什么这些NSARRARY不匹配?
我正在比较两个nsarray——在NSLog输出中,它们看起来相同,但不知何故它们并不相等。如果我将NSArray转换为NSString,我会得到相同的精确结果。将他们与自己进行比较将是平等的。我如何确定为什么一和二不相等?多谢各位Objective c 目标C,为什么这些NSARRARY不匹配?,objective-c,comparison,nsarray,Objective C,Comparison,Nsarray,我正在比较两个nsarray——在NSLog输出中,它们看起来相同,但不知何故它们并不相等。如果我将NSArray转换为NSString,我会得到相同的精确结果。将他们与自己进行比较将是平等的。我如何确定为什么一和二不相等?多谢各位 - (void)confused:(NSArray *)two { NSArray *one = [NSArray arrayWithObjects:@"16777223", @"7", nil]; NSArray *two = [[NSBundl
- (void)confused:(NSArray *)two {
NSArray *one = [NSArray arrayWithObjects:@"16777223", @"7", nil];
NSArray *two = [[NSBundle bundleWithPath:@"/path/to/bundle"] executableArchitectures];
// NSArray "two" shows as 16277223, 7 in NSLog
if ([two firstObjectCommonWithArray:(NSArray *)one])
{
NSLog(@"- it's equal %@ %@", one, two);
// if array one matches array two then this will output
}
else {
NSLog(@"- it's NOT equal %@ %@", one, two);
}
return;
}
以下是console的输出:
myApp (
16777223,
7
)
myApp (
16777223,
7
)
myApp - it's NOT equal (
16777223,
7
)(
16777223,
7
)
-[NSBundle executablearchitecture]
返回一个由NSNumber
对象组成的数组,而不是NSString
对象,因此您传递的数组中没有字符串。如果你改变
NSArray *one = [NSArray arrayWithObjects:@"16777223",@"7", nil];
到
您的代码应该可以工作。
-[NSBundle executablearchitecture]
返回一个包含NSNumber
对象的数组,而不是NSString
对象,因此您传递的数组中没有字符串。如果你改变
NSArray *one = [NSArray arrayWithObjects:@"16777223",@"7", nil];
到
你的代码应该可以工作。你能包括创建两个
吗?这与我的另一个问题直接相关“[[NSBundle bundleWithPath:@”/path/to/bundle“]executablearchitecture]”
;因此,上述示例中NSArray one的值将是@“16777223”、@“7”、nil
Oh。该方法返回的数组是NSNumber
,而不是NSString
。这就是你的问题。是的,如果对象类型不同,即使它们产生相同的描述转储,它们也不可能进行相同的比较。好的,我已经用NSArray 2是如何创建的更新了这个问题。因此,问题实际上是如何表示NSArray one,使其等于2?能否包括创建two
?它与我的另一个问题“[[NSBundle bundleWithPath:@”/path/to/bundle“]executableArchitectures]”直接相关。
;因此,上述示例中NSArray one的值将是@“16777223”、@“7”、nil
Oh。该方法返回的数组是NSNumber
,而不是NSString
。这就是你的问题。是的,如果对象类型不同,即使它们产生相同的描述转储,它们也不可能进行相同的比较。好的,我已经用NSArray 2是如何创建的更新了这个问题。所以真正的问题是如何表示NSArray 1,使其等于2?哇,那么mach-o部分是内置的吗?我不知道,很酷。我现在就去试试——谢谢!你的意思是NSBundleExecutableArchitectureX86\u 64
?这些只是您导入的名称。它们是在NSBundle.h中定义的,就在声明executableArchitectures
的正上方。当您像这样使用枚举中的值时,最好使用它们的名称而不是值来引用它们——这样可以提高可读性并防止可能的值更改(尽管可能性不大).=
比较NSArray
对象在内存中的位置;这些肯定是不平等的firstObjectCommonWithArray:
或[一个相等:两个]
应该都能工作。不是吗?firstObjectCommonWithArray:
返回数组中相同的第一个对象,它不用于相等性检查。哇,所以mach-o部件是内置的?我不知道,很酷。我现在就去试试——谢谢!你的意思是NSBundleExecutableArchitectureX86\u 64
?这些只是您导入的名称。它们是在NSBundle.h中定义的,就在声明executableArchitectures
的正上方。当您像这样使用枚举中的值时,最好使用它们的名称而不是值来引用它们——这样可以提高可读性并防止可能的值更改(尽管可能性不大).=
比较NSArray
对象在内存中的位置;这些肯定是不平等的firstObjectCommonWithArray:
或[一个相等:两个]
应该都能工作。不是吗?firstObjectCommonWithArray:
返回数组中相同的第一个对象,它不用于相等性检查。