Объекты в NSMutableArray недоступны Objective-C - PullRequest
0 голосов
/ 13 декабря 2011

// ARC включен в Xcode 4.2

Создается статическая функция, которая выполняет запрос и получает значения из базы данных SQLite. Значения массива, возвращаемые функцией displayquery, представляют собой массив не изменяемых массивов, которые содержат записи. Я хочу преобразовать его в клиентские объекты и сохранить список списков в объекте NSMutable перед его возвратом.

статическая функция

+ (NSMutableArray*) list
{

    NSString *querySQL = //some query;

    NSMutableArray *values = [Client displayQuery:querySQL numberOfColumns:7];

    NSMutableArray *lst = nil;

    if (values != nil)
    {
        lst = [NSMutableArray arrayWithObject:@"Client"];

        for (int i = 0; i<[[values objectAtIndex:0] count] ; i++) 
        {    
            [lst addObject:[Client new ]];
        }
        for (int i = 0; i<[[values objectAtIndex:0] count] ; i++) 
        {    

            Client *aClient = [lst objectAtIndex:i];
            //error occurs during the execution of this line.
            //all properties of Class client are (retain,nonatomic)
            aClient.idClient = [[values objectAtIndex:0]objectAtIndex:i];
            aClient.prenom = [[values objectAtIndex:1]objectAtIndex:i];
            aClient.name = [[values objectAtIndex:2]objectAtIndex:i];
            aClient.address = [[values objectAtIndex:3]objectAtIndex:i];
            aClient.telephone = [[values objectAtIndex:4]objectAtIndex:i];
            aClient.email = [[values objectAtIndex:5]objectAtIndex:i];
            aClient.weight = [[values objectAtIndex:6]objectAtIndex:i];
            [lst addObject: aClient];

        }
    }
    return lst;
}

1 Ответ

0 голосов
/ 13 декабря 2011

Проблема в том, что первый элемент в вашем массиве lst - это NSString, который не имеет каких-либо свойств, которыми обладает ваш класс Client, и когда вы пытаетесь присвоить ему, вы получаетеошибка.В вашем коде есть несколько проблем:

  1. Не добавляйте @"Client" как элемент в ваш массив, так как кажется, что он там не принадлежит.
  2. Выне нужно предварительно добавлять Client объекты в массив.Просто создайте их и добавляйте их в массив по мере продвижения.
  3. Когда у вас есть массивы массивов, становится сложнее понять, для чего нужен каждый индекс, когда вы просматриваете элементы.Я переименовал пару переменных в вашем коде, потому что это облегчило мне понимание.

Я думаю, ваш код должен выглядеть примерно так:

+ (NSMutableArray*) list
{
    NSString *querySQL = //some query;
    NSMutableArray *columns = [Client displayQuery:querySQL numberOfColumns:7];
    NSMutableArray *lst = nil;

    if (columns == nil)
        return nil;

    NSUInteger count = [[columns objectAtIndex:0] count];
    lst = [NSMutableArray arrayWithCapacity:count];

    for (NSUInteger row = 0; row < count; row++) 
    {    
        Client *aClient = [Client new];

        aClient.idClient = [[columns objectAtIndex:0] objectAtIndex:row];
        aClient.prenom = [[columns objectAtIndex:1] objectAtIndex:row];
        aClient.name = [[columns objectAtIndex:2] objectAtIndex:row];
        aClient.address = [[columns objectAtIndex:3] objectAtIndex:row];
        aClient.telephone = [[columns objectAtIndex:4] objectAtIndex:row];
        aClient.email = [[columns objectAtIndex:5] objectAtIndex:row];
        aClient.weight = [[columns objectAtIndex:6] objectAtIndex:row];

        [lst addObject: aClient];
    }

    return lst;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...