Using pointers to adjust global objects in objective-c

Posted by Rob on Stack Overflow See other posts from Stack Overflow or by Rob
Published on 2012-12-08T10:53:33Z Indexed on 2012/12/08 11:05 UTC
Read the original article Hit count: 251

Filed under:
|
|
|

Ok, so I am working with two sets of data that are extremely similar, and at the same time, these data sets are both global NSMutableArrays within the object.

data_set_one = [[NSMutableArray alloc] init];
data_set_two = [[NSMutableArray alloc] init];

Two new NSMutableArrays are loaded, which need to be added to the old, existing data. These Arrays are also global.

xml_dataset_one = [[NSMutableArray alloc] init];
xml_dataset_two = [[NSMutableArray alloc] init];

To reduce code duplication (and because these data sets are so similar) I wrote a void method within the class to handle the data combination process for both Arrays:

-(void)constructData:(NSMutableArray *)data fromDownloadArray:(NSMutableArray *)down withMatchSelector:(NSString *)sel_str

Now, I have a decent understanding of object oriented programming, so I was thinking that if I were to invoke the method with the global Arrays in the data like so...

[self constructData:data_set_one fromDownloadArray:xml_dataset_one withMatchSelector:@"id"];

Then the global NSMutableArrays (data_set_one) would reflect the changes that happen to "array" within the method. Sadly, this is not the case, data_set_one doesn't reflect the changes (ex: new objects within the Array) outside of the method.

Here is a code snippet of the problem

// data_set_one is empty
// xml_dataset_one has a few objects

[constructData:(NSMutableArray *)data_set_one fromDownloadArray:(NSMutableArray *)xml_dataset_one withMatchSelector:(NSString *)@"id"];

// data_set_one should now be xml_dataset_one, but when echoed to screen, it appears to remain empty

And here is the gist of the code for the method, any help is appreciated.

-(void)constructData:(NSMutableArray *)data fromDownloadArray:(NSMutableArray *)down withMatchSelector:(NSString *)sel_str {
    if ([data count] == 0) {
        data = down;  // set data equal to downloaded data
    } else if ([down count] == 0) {
        // download yields no results, do nothing
    } else { 
        // combine the two arrays here 
    }
}

This project is not ARC enabled.

Thanks for the help guys! Rob

© Stack Overflow or respective owner

Related posts about objective-c

Related posts about oop