Property Speichermanagement

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Property Speichermanagement

    Hallo,

    ich habe folgenden Code:

    Quellcode

    1. - (void)cloneDatabase {
    2. SQLConnector *sqlConnector = [[SQLConnector alloc] initWithConnection];
    3. [sqlConnector loadDataFromDB:query];
    4. [sqlConnector getRows:@"user"];
    5. }


    SQLConnector.m

    Quellcode

    1. @property (weak, nonatomic) NSArray *results;
    2. - (NSArray*)getRows:(NSString*) col {
    3. NSArray* arr = self.results;
    4. NSMutableArray *marr;
    5. for (NSArray* table in arr)
    6. for (NSDictionary* row in table)
    7. for (NSString* column in row) {
    8. if ([column isEqualToString:col]) {
    9. NSLog(@"%@", row[column]);
    10. [marr addObject:row[column]];
    11. arr = marr;
    12. }}
    13. return arr;
    14. }
    Alles anzeigen


    Wenn ich getRows aufrufe ist self.results immer nil ? Aber wenn ich die Methode in der SQLConnector Klasse aufrufe also in loadDataFromDB verschachtel, dann läufts ?

    Gruß
  • Meine Zuweisung habe ich hier...

    Quellcode

    1. - (void)loadDataFromDB:(NSString*)query {
    2. [self.client connect:connection username:self.user password:self.password database:self.database completion:^(BOOL success) {
    3. if (success) {
    4. [self.client execute:query completion:^(NSArray* results) {
    5. self.results = results;
    6. [self.client disconnect];
    7. }];
    8. }
    9. }];
    10. }


    Ich meine wenn ich die getRows Methode nach der Zuweisung schreibe funktioniert es:

    Quellcode

    1. - (void)loadDataFromDB:(NSString*)query {
    2. [self.client connect:connection username:self.user password:self.password database:self.database completion:^(BOOL success) {
    3. if (success) {
    4. [self.client execute:query completion:^(NSArray* results) {
    5. self.results = results;
    6. [self getRows:@"user"];[
    7. self.client disconnect];
    8. }];
    9. }
    10. }];
    11. }
    Alles anzeigen
  • eminwargo schrieb:

    Ich meine wenn ich die getRows Methode nach der Zuweisung schreibe funktioniert es:

    Das funktioniert da, weil du da innerhalb des Completion Blocks getRows: aufrufst, d.h. der query ist dann auch abgearbeitet. Wenn du aber wie im ersten Beitrag nach dem Aufruf von loadDataFromDB: direkt getRows: aufrufst, ist die Methode loadDataFromDB: noch nicht fertig mit dem Datenabruf, denn der Datenabruf wird sicherlich asynchron ablaufen.