我有一些代码需要使用for循环来读取数组中的变量。
int size=sizeof names;
NSLog(@"thelast one is %d",size);
NSString *usersName=userName.text;
NSString *usersPass=passWord.text;
for (i=0; i<=size;i++){
NSString *namesArray=[names objectAtIndex:i];
NSString *passArray=[pass objectAtIndex:i];
NSLog(@"namesArray %@",namesArray);
NSLog(@"passArray %@",passArray);
if([namesArray isEqualToString:usersName]){
userValid=1;
NSLog(@"The content of arry4 is %@",namesArray);
}
if([passArray isEqualToString:usersPass]){
passValid=1;
NSLog(@"The content of arry4 is %@",passArray);
}
else {
userValid=0;
passValid=0;
}
}
我遇到了一些问题,因为每次从程序中调用此函数时,几乎就像'sizeof names'是错误的,因此不会检查数组中的所有值。 我通常是一个Java程序员,所以我习惯了names.length,我被告知sizeof名称基本上是同样的东西......任何帮助?
干杯。
答案 0 :(得分:30)
不要使用sizeof。使用[names count]
。
答案 1 :(得分:3)
您想使用[名称计数]而不是名称大小。 Sizeof将为您提供实际名称对象指针本身的大小,而不是元素的数量,因为它是动态内存类型。
答案 2 :(得分:0)
要获取NSAarray
中存储的元素数量,您应该使用实例方法count
,该方法返回NSUInteger
。
另外,如果我没记错的话,你可以使用for in
循环遍历这些元素,这个循环也可以在Java中使用。
for (MyClass *element in myArray) {
NSLog(@"%@", element);
}
请注意,sizeof
是一个C运算符,它返回其操作数的字节大小,因此它不会告诉您NSArray
中存储了多少元素,而是以字节为单位的大小一个NSArray实例。
答案 3 :(得分:0)
我知道你的问题已经得到了解答 - 但是这里有更多 Cocoa 的写作方式
NSString *userName = userName.text;
NSString *userPass = passWord.text;
// Use a block enumerator
NSUInteger nameIdx = [names indexOfObjectPassingTest:^(id obj, NSUInteger idx, BOOL *stop) {
return ([obj isEqualToString:userName]);
}];
// Is the name in the array
if (nameIdx == NSNotFound) {
// Name not in array - so set to zero
userValid = 0;
passValid = 0;
} else {
userValid = 1;
// See if the corresponding password is correct
NSString password = [pass objectAtIndex:nameIdx];
if (![password isEqualToString:userPass]) {
passValid = 0;
} else {
passValid = 1;
}
答案 4 :(得分:0)
也可以使用快速枚举,在某些情况下,读者可以更清楚:
NSString *userName = userName.text;
NSString *userPass = passWord.text;
BOOL userValid = NO;
BOOL passValid = NO;
int index = 0;
for (NSString *eachName in namesArray) {
if ([eachName isEqualToString:userName) {
userValid = YES:
if ([[passArray objextAtIndex:index] isEqualToString:passWord) {
passValid = YES;
}
break;
}
index += 1;
}