【发布时间】:2016-05-27 15:38:01
【问题描述】:
我将用户的答案存储在数组的 NSMutableString 元素中。当数组的所有元素都具有值并且用户将完成问题时,我想显示一个弹出窗口(调用 popGoResultsAlert),我在互联网上搜索但没有成功找到解决方案。
这是我的代码:
头等舱
[UserData updateUserAnswerValues:[userData objectForKey:@"userAnswerValues"]];
//第二类,userData.m的一部分
static NSMutableArray *userAnswerValues;
+ (NSMutableArray *)getAnswersCompleted {
return userAnswerValues;
}
+ (void)updateUserAnswerValues:(NSArray *)newAnswerValues
{
userAnswerValues = [[NSMutableArray alloc] init];
[userAnswerValues addObjectsFromArray:newAnswerValues];
}
+ (void)updateUserAnswerValueWithIndex:(NSUInteger)index andValue:(NSMutableString*)value
{
[userAnswerValues setObject:value atIndexedSubscript:index];
}
第三类:
- (void)viewWillAppear:(BOOL)animated
{
NSMutableArray *userAnswerValues = [UserData getAnswersCompleted];
for (int i=0; i<userAnswerValues.count; i++) {
id object = userAnswerValues[i];// similar to [myArray objectAtIndex:0]
if(object && [object length] !=0 && i!=0)
{
[self popGoResultsAlert];
break;
} else if (!object) {
continue;
}
}
}
编辑: //第 4 类,这里似乎根据用户从 PickerView 中选择的内容将原始数据填充到 userAnswerValues,该索引具有值,并且该值由 selectedOptionValue 变量放置......我已经调试了 userAnswerValues 并注意到该值有 56 userAnswerValues = ( "", "", "", "", "", "", "", "", 4, 3, 4, 3, "", ... 等元素" 直到 56 个项目> , "" ); 所以每当用户在 PickerView 中选择一个值时,上面的元素之一用索引号填充,所以我的问题是如何搜索这些可变数组并查看所有项目是否都有值...
NSUInteger index = [self.currentQuestion.index integerValue];
[UserData updateUserAnswerWithIndex:index andValue:self.selectedOptionIndex];
Option *selectedOption = [self.currentOptions objectAtIndex:[self.selectedOptionIndex integerValue]];
NSString *selectedOptionValue = selectedOption.value;
[UserData updateUserAnswerValueWithIndex:index andValue:selectedOptionValue];
有 3 个问题部分将所有答案的值存储在一个相同的数组中。使用上面的代码,只要 3 个部分中的每一个都完成就会弹出警报,我的意图是它只会在所有 3 个部分都完成时才显示弹出......
我有测试[object length] !=0 , ![object isEqual:[NSNull null]] , ![object isEqualToString:@""] 没有运气,所有 3 有相同的行为(显示每个部分完成后弹出,
这些项目不是我从头开始编写的,所以我正在尝试调试和修复其中的一些错误,当我调试 userAnswerValues 时,我看到 NSMutableArray 的项目在不同的元素类型中有不同的类型,正如你看到的项目第 32 项是 _NSFConstantString,值为空,而第 33 项是 NSTagedPointerString……详情请看附件。
【问题讨论】:
-
使用 bool 值或检查 i == lastObject [你知道这是数组的结尾],然后放 show alert。
-
仅供参考 -
object不能是nil。无需检查是否是。 -
@user3344236 据我所知,数组的项目没有按顺序填写,因为有3个部分的问题,所有这3个部分的值都存储在同一个数组中,所以用户可能首先选择第三部分来回答,所以最后一个对象可能完成,但第一和第二部分是空的,所以在这种情况下我不想显示弹出窗口,只有当数组的所有项目都有一个值时.. .
-
@user3344236,你能在源代码中告诉我如何用布尔值解决它吗?
-
你看到不同类型的原因是 NSString 是一个类簇。它实例化的对象是各种优化的具体子类,只能被视为 NSString 或 CFString。他们符合成为那些人的要求。
标签: ios objective-c arrays nsmutablearray