Yang Jie Domodomo
Yang Jie Domodomo

Reputation: 685

random generator to obtain data from array not displaying

I know theres a better solution using arc4random (it's on my to-try-out-function list), but I wanted to try out using the rand() and stand(time(NULL)) function first. I've created a NSMutableArray and chuck it with 5 data. Testing out how many number it has was fine. But when I tried to use the button function to load the object it return me with object <sampleData: 0x9a2f0e0>

- (IBAction)generateNumber:(id)sender {

        srand(time(NULL));
    NSInteger number =rand()% ds.count ;
    label.text = [NSString stringWithFormat:@"object %@", [ds objectAtIndex:number] ];
    NSLog(@"%@",label.text);

 }

While I feel the main cause is the method itself, I've paste the rest of the code below just incase i made any error somewhere.

ViewController.h

#import <UIKit/UIKit.h>
#import "sampleData.h"
#import "sampleDataDAO.h"
@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *label;
@property (weak, nonatomic) IBOutlet UIButton *onHitMePressed;
- (IBAction)generateNumber:(id)sender;
@property(nonatomic, strong) sampleDataDAO *daoDS;
@property(nonatomic, strong) NSMutableArray *ds;
@end

ViewController.m

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController
@synthesize label;
@synthesize onHitMePressed;
@synthesize daoDS,ds;


- (void)viewDidLoad
{
    [super viewDidLoad];
    daoDS = [[sampleDataDAO alloc] init];
    self.ds = daoDS.PopulateDataSource;
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)viewDidUnload
{
    [self setLabel:nil];
    [self setOnHitMePressed:nil];
    [super viewDidUnload];
    // Release any retained subviews of the main view.
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

- (IBAction)generateNumber:(id)sender {

    srand(time(NULL));
NSInteger number =rand()% ds.count ;
label.text = [NSString stringWithFormat:@"object %@", [ds objectAtIndex:number] ];
NSLog(@"%@",label.text);

} @end

sampleData.h

#import <Foundation/Foundation.h>

@interface sampleData : NSObject
@property (strong,nonatomic) NSString * object;
@end

sampleData.m

#import "sampleData.h"

@implementation sampleData
@synthesize object;
@end

sampleDataDAO.h

#import <Foundation/Foundation.h>
#import "sampleData.h"
@interface sampleDataDAO : NSObject
@property(strong,nonatomic)NSMutableArray*someDataArray;

-(NSMutableArray *)PopulateDataSource;
@end

sampleDataDAO.m

#import "sampleDataDAO.h"

@implementation sampleDataDAO
@synthesize someDataArray;

-(NSMutableArray *)PopulateDataSource
{
    someDataArray = [[NSMutableArray alloc]init];

    sampleData * myData = [[sampleData alloc]init];
    myData.object= @"object 1";
    [someDataArray addObject:myData];
    myData=nil;



   myData = [[sampleData alloc] init];
    myData.object= @"object 2";
    [someDataArray addObject:myData];
    myData=nil;

    myData = [[sampleData alloc] init];
    myData.object= @"object 3";
    [someDataArray addObject:myData];
    myData=nil;

    myData = [[sampleData alloc] init];
    myData.object= @"object 4";
    [someDataArray addObject:myData];
    myData=nil;

    myData = [[sampleData alloc] init];
    myData.object= @"object 5";
    [someDataArray addObject:myData];
    myData=nil;



    return someDataArray;
}


@end

Upvotes: 0

Views: 119

Answers (1)

tomidelucca
tomidelucca

Reputation: 2543

what i guess is going on is that nslog function cant print the data inside your sample data class because its not a standard class. not standard classes must implement the "description" method. What you get when you print out your class is the pointer to it, because nslog has no way of knowing how to print out the data in your class.

if what you want to print on that label/nslog is the nsstring inside your class "sampledata" you should access the property.

this can be done in the following way:

SampleData *instanceOfSampleData = (SampleData*)[ds objectAtIndex:number];

label.text = [NSString stringWithFormat:@"object %@", instanceOfSampleData.object];

Upvotes: 1

Related Questions