编辑:我项目中使用的所有数组都是NSMutableArray
类
我想要做的概述是来自我的selectClueView,用户可以从3-10中选择一个数字。这代表了他们将扮演的线索数量。然后,它将生成0到objectArray.count
之间的随机数列表,并将NSNumber
添加到另一个称为dataArray的数组中。一切正常,包括将prepareForSegue
转移到SelectClueViewController.dataArray
GamePageViewController.clueToSelect
但是,我坚持将数据从包含所有对象ds
的数组加载到新数组allDataObject
中。我对iOS很新,因为我在c#中有一个工作函数,我试图在objective-C中复制它,不幸的是我似乎无法完全复制它。
简而言之,我正在尝试将allDataObject
数组中的数据添加到ds
数组中,NSNumber
数组中包含cluesToSelect
个值。
以下是使用的编码。任何帮助解决问题将非常感激。如果有更多信息我应该提供,请告诉我。
SelectClueViewController.m
- (IBAction)onGoPress:(id)sender {
[self chooseNumber];
NSLog(@"Array got %d numbers",dataArray.count);
}
-(void)chooseNumber
{
[dataArray removeAllObjects];
maxCount = [numberOfClues.text intValue];
int count = 0;
do {
NSInteger rdmNumber = arc4random()%objectArray.count;
if (![dataArray containsObject:[NSNumber numberWithInt:rdmNumber]])
{
NSNumber* number = [NSNumber numberWithInt:rdmNumber];
[dataArray addObject:number];
count++;
NSLog(@"random no - %d",rdmNumber);
}
} while (count < maxCount);
}
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if ([[segue identifier] isEqualToString:@"sendNumber"]) {
GamePageViewController *gpViewController = [segue destinationViewController];
gpViewController.cluesToSelect = self.dataArray;
NSLog(@"Success");
}
}
GamePageViewController.m
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
daoDS = [[ClueDataDAO alloc]init];
self.allDataObject = daoDS.PopulateDataSource;
NSLog(@"%d",cluesToSelect.count);
[self fillDataSample];
//for keyboard
self.answer.delegate = self;
}
-(void)fillDataSample
{
int count = 0;
do {
// [self.ds addObject:[allDataObject objectAtIndex:[[cluesToSelect objectAtIndex:count]intValue] ]];
ds = [[NSMutableArray alloc]init];
currentClueData = [[ClueData alloc]init];
int firstIndex = [[cluesToSelect objectAtIndex:count]intValue];
currentClueData = [allDataObject objectAtIndex:firstIndex];
[ds addObject:currentClueData];
count++;
} while (count < cluesToSelect.count);
NSLog(@"ds got %d object",ds.count);
}
编辑:
我现在能够将对象添加到ds
数组中,遗憾的是它只添加一次。有人可以查看我的fillDataSample
功能吗?
答案 0 :(得分:0)
在您指向开头的行中:
[self.ds addObject:[allDataObject objectAtIndex:[cluesToSelect objectAtIndex:count]]];
只是猜测,但[cluesToSelect objectAtIndex:count]
会返回一个对象。您正尝试将其传递给另一个objectAtIndex:
,其中int
为参数。我猜这个错误可能来自于此。如果是.intValue
,您可以尝试使用cluesToSelect
。
编辑:
考虑到allDataObject
和int firstIndex = [[cluesToSelect objectAtIndex:count] intValue];
int secondIndex = [[allDataObject objectAtIndex: firstIndex] intValue];
[self.ds addObject:secondIndex];
只包含NSNumbers,这里的内容更具可读性:
{{1}}
答案 1 :(得分:0)
根据我们的讨论,
请检查一下:
[self.ds addObject:[allDataObject objectAtIndex:[[cluesToSelect objectAtIndex:count] intValue]]];
会做你的工作。
答案 2 :(得分:0)
为什么它对我从allClueData
加载对象currentClueData
到ds
的新方法不起作用的原因是因为我没有{{1}将类对象添加到nil
后再添加alloc init
。该对象无法像其他语言一样覆盖自己的值。 (这可能就是为什么我在目标C中破坏了我的大脑)但是在添加ds
对象并投射nil
后,它现在工作得很好。谢谢大家:))
- (无效)fillDataSample { int count = 0; currentClueData = [[ClueData alloc] init]; ds = [[NSMutableArray alloc] init]; 做{ // [self.ds addObject:[allDataObject objectAtIndex:[[cluesToSelect objectAtIndex:count] intValue]];
alloc and init
}