Заполнить NSArray с NSFetchRequest => [количество массивов] неправильно - PullRequest
0 голосов
/ 06 декабря 2011

У меня есть пользовательский NSManagedObject, который имеет несколько свойств.Я alloc и init два экземпляра объекта: compare1 & compare2.Затем я делаю NSFetchRequest, чтобы получить два из этих пользовательских объектов и заполнить их свойства структурой NSArray, чтобы отобразить их в UITableView позже.

Моя проблема в том, что UITableView падает,Я провел некоторое исследование в коде и обнаружил, что иногда массив не имеет полного счета.Когда я играю со своими ползунками и текстовым полем, это иногда работает, но это (по крайней мере, для меня) невозможно воспроизвести.

Заранее спасибо!

РЕДАКТИРОВАТЬ: проблемасейчас ясно.object description завершен.Я передаю его на NSArray через NSArray * array = [[NSArray alloc] initWithObjects: object.value1, ..., nil];.Теперь странная вещь: [array count] дает мне неправильный номер?В массиве находятся только значения != 0.Почему так?Спасибо!

Вот код NSFetchRequest:

-(NSArray *)performFetch
{

if (__managedObjectContext == nil)
{
    __managedObjectContext = [(MasterViewController *)[[UIApplication sharedApplication] delegate] managedObjectContext];
}

NSError *error = nil;

NSManagedObjectContext *context = [self managedObjectContext];

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Entity" inManagedObjectContext:context];
[fetchRequest setEntity:entity];
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];

NSLog(@"FetchedObjects Count: %i", [fetchedObjects count]); //always right

compare1 = [fetchedObjects objectAtIndex:0]; //compare is a custom NSObject
compare2 = [fetchedObjects objectAtIndex:1]; //with several properties (.1 to .17)

NSLog(@"%@",[compare1 description]); //is complete
NSLog(@"%@",[compare2 description]); //is complete

NSArray * valuesS1 = [[NSArray alloc] initWithObjects:compare1.1,__andsoon__compare1.14, nil];

NSArray * valuesB1 = [[NSArray alloc] initWithObjects:compare1.14__andsoon__compare1.17, nil];


NSArray * valuesS2 = [[NSArray alloc] initWithObjects:compare2.1,__andsoon__compare2.14, nil];

NSArray * valuesB2 = [[NSArray alloc] initWithObjects:compare2.14__andsoon__compare2.17, nil];


NSMutableArray * valuesArray1 = [[NSMutableArray alloc] initWithObjects:valuesS1, valuesB1, nil];
NSMutableArray * valuesArray2 = [[NSMutableArray alloc] initWithObjects:valuesS2, valuesB2, nil];


compareArray = [[NSMutableArray alloc] initWithObjects:valuesArray1, valuesArray2, nil];

NSLog(@"Array1 count: %i",[values1 count]); //sometimes (I don't know why)
NSLog(@"Array2 count: %i",[values2 count]); //[values1 count] != [values2 count]

return compareArray; //sometimes returns an array with too less objects so my UITableView crashes

1 Ответ

1 голос
/ 07 декабря 2011

В массиве находятся только значения! = 0

Вы не можете добавлять nil значения непосредственно в массив.(nil обычно равен нулю.) Если вам нужно добавить «пустые» значения в массив, вам нужно проверить и вставить вместо него значение NSNull.Например:

NSArray * valuesS1 = [[NSArray alloc] initWithObjects:val1 ? val1 : [NSNull null], val2 ? val2 : [NSNull null], nil];

Редактировать

?: эквивалентно:

if (val1) {
  return val1;
}
else {
  return [NSNull null];
}

Если вы хотите использовать @"0"вместо NSNull вы можете;это может быть что угодно, если это объект, а не nil.

...