我需要能够从plist中提取100个字符串并将其显示在我项目中的标签中。我设法让这个工作从我的plist中的两个不同数组中提取数据,然后生成一个随机字符串来显示。
我现在要做的是确保在一个会话中没有两个字符串显示两次,并且还能够设置一个计数器系统,在5次之后它会显示一条消息。
我正在考虑在x转动之后为显示消息做一个简单的计数器,但是当涉及到不显示数组中的重复时,我有点丢失。我需要它基本上只从数组中删除一个项目(每次用户按下按钮时不是plist)
- (IBAction)truth:(id)sender {
NSString *path = [[NSBundle mainBundle] pathForResource:
@"test" ofType:@"plist"];
NSDictionary *plistDict = [[NSDictionary alloc] initWithContentsOfFile:path];
NSMutableArray *plistArray = plistDict[@"truth"];
NSDictionary *plistDict2 = [[NSDictionary alloc] initWithContentsOfFile:path];
NSMutableArray *plistArray2 = plistDict2[@"dare"];
plistArray = [plistArray arrayByAddingObjectsFromArray:plistArray2];
NSLog(@"%@", plistArray);
int randV = arc4random() % plistArray.count;
self.joke.text = plistArray[randV];
NSLog(@"dictionary: %@, array: %@", plistDict, plistArray);
}
答案 0 :(得分:2)
您遇到的问题是,每次收到消息时,您都会再次阅读这些帖子并重新创建plistArray
正确的方法是将plistArray保存到局部变量(属性)中,并且只在第一次填充它。
然后,如果你想删除一个项目,你可以调用`[plistArray removeObjectAtIndex:randV];
编辑:代码
// In .h file
@property (strong, nonatomic) NSMutableArray * plistArray;
- (IBAction)truth:(id)sender {
if (!self.plistArray) {
NSString *path = [[NSBundle mainBundle] pathForResource:
@"test" ofType:@"plist"];
NSDictionary *plistDict = [[NSDictionary alloc] initWithContentsOfFile:path];
NSArray * plistArray1 = plistDict[@"truth"];
NSDictionary *plistDict2 = [[NSDictionary alloc] initWithContentsOfFile:path];
NSArray *plistArray2 = plistDict2[@"dare"];
self.plistArray = [[plistArray1 arrayByAddingObjectsFromArray:plistArray2] mutableCopy];
}
NSLog(@"%@", plistArray);
int randV = arc4random() % self.plistArray.count;
self.joke.text = self.plistArray[randV];
[self.plistArray removeObjectAtIndex:randV];
NSLog(@"dictionary: %@, array: %@", plistDict, self.plistArray);
}
@属性
答案 1 :(得分:0)
从NSMutableSet
创建plistArray
,每次检索时都会从集合中删除它。的Presto!
编辑:添加代码
NSMutableSet *jokes = [[NSMutableSet alloc] initWithArray:plistArray];
NSString *joke = [jokes anyObject];
[jokes removeObject:joke];
免责声明:正如文档所述,anyObject
不保证是随机的。我相信你可以在这里为自己解决问题。 E.g。
NSString *joke = [[jokes allObjects] objectAtIndex:arc4random() % [jokes count]];
答案 2 :(得分:0)
[plistArray removeObjectAtIndex: randV];