iOS将对象添加到基于第3个数组值的另一个数组的数组中

时间:2012-11-29 15:51:07

标签: objective-c ios

编辑:我项目中使用的所有数组都是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功能吗?

3 个答案:

答案 0 :(得分:0)

在您指向开头的行中:

[self.ds addObject:[allDataObject objectAtIndex:[cluesToSelect objectAtIndex:count]]];

只是猜测,但[cluesToSelect objectAtIndex:count]会返回一个对象。您正尝试将其传递给另一个objectAtIndex:,其中int为参数。我猜这个错误可能来自于此。如果是.intValue,您可以尝试使用cluesToSelect

编辑:

考虑到allDataObjectint 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加载对象currentClueDatads的新方法不起作用的原因是因为我没有{{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

}