NSMutableArray вопрос записи? - PullRequest
0 голосов
/ 16 июля 2011

Я читаю в CSV-файле, и теперь я анализирую строку и записываю элемент в 2D NSMutableArray.

Как я записываю элементы в 2D-массив, NSLog выводит ожидаемый элемент.*

Но когда я закончу анализ и запись всего файла в 2D-массив, NSLog показывает последний элемент в каждой строке для каждого столбца в этой строке.

- как если бы каждый элемент вряд был заменен.???почему, спасибо заранее ...

for (int i = 1; i < iM; i++) {//was a 1 to pass over the header
    //get the row and break up into columns
    nsmarrDummy = [NSMutableArray arrayWithArray:[[nsmarrRow objectAtIndex: i] componentsSeparatedByString:  nsstrColParse]];


    //write each item to the proper column in the 2d array at the given row
    for (int j = 0; j < iN; j++) {//<<--
        [[nsmarrData objectAtIndex:j] replaceObjectAtIndex:i-1 withObject: [nsmarrDummy objectAtIndex:j]]; 
        NSLog(@"i:%d    j:%d  item:%@", i, j, [[nsmarrData objectAtIndex:j] objectAtIndex:i-1]);
    }

}
//all the following are the same value, but doing the NSLog as it was writing was correct.
NSLog(@"FINAL:  i:%d    j:%d  item:%@", 0, 4, [[nsmarrData objectAtIndex:4] objectAtIndex:0]);
NSLog(@"FINAL:  i:%d    j:%d  item:%@", 0, 5, [[nsmarrData objectAtIndex:5] objectAtIndex:0]);
NSLog(@"FINAL:  i:%d    j:%d  item:%@", 0, 6, [[nsmarrData objectAtIndex:6] objectAtIndex:0]);

1 Ответ

1 голос
/ 16 июля 2011

Это серьезный трэш, который я вижу в вашем примере, кроме проблемы, которая скрывается там.Какао может сделать большую часть работы для вас.У этого есть призыв грома.Пусть это будет на вашей стороне:

// Get the contents of the file.
// Real apps never ignore their errors or potential nil results.
// For this example, assume path exists.

NSString *fileContents = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:NULL];

NSMutableArray *nsmarrData = [NSMutableArray array];

NSArray *lines = [fileContents componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
for (NSString *line in lines)
{
    // Guard against the last line being only a return.

    if ([line length] > 0)
    {
        NSArray *tokens = [line componentsSeparatedByString:@","]; // assuming no space as well
        [nsmarrData addObject:tokens];
    }
}

Это создаст NSMutableArray, заполненный NSArrays для каждой строки.Нужен NSMutableArray для каждой строки?Нет проблем.Вместо:

[nsmarrData addObject:tokens];

вы можете использовать:

[nsmarrData addObject:[NSMutableArray arrayWithArray:tokens]];

Конечно, ни одно из этого не учитывает различное количество элементов в строке;вам нужно остерегаться этого позже.

Удачи вам в ваших начинаниях.

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