Luis Rivera
Luis Rivera

Reputation: 11

Difficulty with getting random words from NSArray

When I Build & Run my application, it will not generate anything. What I have generating are words and after it erases that word and continues until it exhausts all the words and then repopulates the list again. Here is the code:

@implementation randomnumbersViewController
@synthesize words;
@synthesize randomArray;
@synthesize array;

-(IBAction)generateNumber:(id)sender {

    NSInteger randomize(id num1, id num2, void *context);
    int rand = arc4random() %2;
    if (rand)
        return NSOrderedAscending;
    else
        return NSOrderedDescending;
}

- (void)resetRandomArray;
{
    [randomArray setArray: array];
    [randomArray sortUsingFunction:random context:NULL];
}

- (NSString*) getRandomWord; {
    if ([randomArray count] ==0)
        return nil;
    NSString* result;
    NSInteger randomIndex = [[randomArray lastObject] intValue];
    [randomArray removeLastObject];
    result = [words objectAtIndex:randomIndex];
    return result;
}

- (void)buildRandomWordArray
{
    NSInteger index;

    NSError *theError;
    NSString *path = [[NSBundle mainBundle] pathForResource:@"words" ofType:@"text"];
    NSString *text = [NSString stringWithContentsOfFile: path
                                               encoding: NSUTF8StringEncoding
                                                  error: &theError];
    self.words = [text componentsSeparatedByString: @"\n"];

    int arraySize = [words count];
    self.array = [NSMutableArray arrayWithCapacity:arraySize];

    //This code fills "array' with index values from 0 to the number of elements in the     "words" array.
    for (index = 0; index<arraySize; index++)
        [array addObject: [NSNumber numberWithInt: index]];
    [self resetRandomArray];

    //for (index = 0; index<=arraySize; index++)
    // NSLog(@ "Random word: %@", [self getRandomWord]);
}

Also a .txt document must be included in the resources folder in for this to work and I do have it there, but nothing. Does anyone have any suggestions as to how I can actually get it to generate the words, or why it isn't working properly?

Upvotes: 0

Views: 273

Answers (1)

Jano
Jano

Reputation: 63667

I don't get how sorting the array ascending or descending is going to shuffle the array, maybe because it doesn't. :) You should use the Fisher–Yates shuffle implemented here: What's the Best Way to Shuffle an NSMutableArray? Import that category, and just call shuffle on the mutable array.

Upvotes: 1

Related Questions