Вы были правы в своем комментарии, но вместо этого используйте doTask().toSingleDefault("Completed");
Во-первых, необходимо выделить и инициализировать объекты перед использованием, чем-то как: NSMutableArray * sections = [[NSMutableArray alloc] initWithCapacity:10];
Для строк Вам нужен один объект для каждого, ни одного NSMutableArray * rows;
Второй, в зависимости от того, используете ли Вы Xcode 4.4 + (который представил индексирование, иначе section[i]
& section[i] = …
) Вам, вероятно, придется использовать [sections objectAtIndex:i]
для чтения и [section replaceObjectAtIndex:i withObject: objectToAdd]
для записи.
В-третьих, массив не может иметь дыр, т.е. obj1, ноля, obj2. Необходимо предоставить фактический объект каждому индексу. Если Вы ничего действительно не должны помещать, можно использовать NSNull
объект.
Кроме того, не забывайте, что можно также хранить объекты Objective C в простых массивах C:
id table[lnum][rnum];
table[i][j] = myObj;
Если Вы хотите сделать это использование массивы, можно инициализировать Ваш sections
массив, затем добавьте массив строк следующим образом:
NSMutableArray *sections = [[NSMutableArray alloc] init];
NSMutableArray *rows = [[NSMutableArray alloc] init];
//Add row objects here
//Add your rows array to the sections array
[sections addObject:rows];
Если Вы хотите добавить этот объект строк в определенном индексе, используйте следующее:
//Insert your rows array at index i
[sections insertObject:rows atIndex:i];
Можно затем изменить этот массив строк путем получения массива:
//Retrieve pointer to rows array at index i
NSMutableArray *rows = [sections objectAtIndex:i]
//modify rows array here
Вы могли всегда создавать свой собственный названный класс Section
, который имеет NSMutableArray
участника позвонили rows
; затем Вы храните свои строки в этом массиве и храните Section
объекты в массиве:
@interface Section : NSObject {
NSMutableArray *rows;
}
Затем Вы просто создаете Section
объекты, и можно создать методы в классе для добавления/удаления объектов строки. Затем Вы упаковываете весь Sections
объекты в другом массиве:
Section *aSection = [[Section alloc] init];
//add any rows to your Section instance here
NSMutableArray *sections = [[NSMutableArray alloc] init];
[sections addObject:aSection];
Это становится более полезным, если Вы хотите добавить больше свойств для каждого Section
экземпляр.
Язык не имеет никакой поддержки многомерных объектно-ориентированных массивов, но можно сделать класс, который делает это с помощью NSMutableArray, полного NSMutableArrays, как следующее. Я не попытался компилировать это или что-либо, я просто ввел его.
@interface SectionArray : NSObject {
NSMutableArray *sections;
}
- initWithSections:(NSUInteger)s rows:(NSUInteger)r;
+ sectionArrayWithSections:(NSUInteger)s rows:(NSUInteger)r;
- objectInSection:(NSUInteger)s row:(NSUInteger)r;
- (void)setObject:o inSection:(NSUInteger)s row:(NSUInteger)r;
@end
@implementation SectionArray
- initWithSections:(NSUInteger)s rows:(NSUInteger)r {
if ((self = [self init])) {
sections = [[NSMutableArray alloc] initWithCapacity:s];
NSUInteger i;
for (i=0; i<s; i++) {
NSMutableArray *a = [NSMutableArray arrayWithCapacity:r];
for (j=0; j<r; j++) {
[a setObject:[NSNull null] atIndex:j];
}
[sections addObject:a];
}
}
return self;
}
+ sectionArrayWithSections:(NSUInteger)s rows:(NSUInteger)r {
return [[[self alloc] initWithSections:s rows:r] autorelease];
}
- objectInSection:(NSUInteger)s row:(NSUInteger)r {
return [[sections objectAtIndex:s] objectAtIndex:r];
}
- (void)setObject:o inSection:(NSUInteger)s row:(NSUInteger)r {
[[sections objectAtIndex:s] replaceObjectAtIndex:r withObject:0];
}
@end
Вы использовали бы его как это:
SectionArray *a = [SectionArray arrayWithSections:10 rows:5];
[a setObject:@"something" inSection:4 row:3];
id sameOldSomething = [s objectInSection:4 row:3];
К вашему сведению: код Джека требует большой работы, прежде чем он заработает. Среди других проблем, автозапуск может привести к освобождению данных до того, как вы получите к ним доступ, и его использование вызывает метод класса arrayWithSections: rows: когда он фактически определен как sectionArrayWithSections: rows:
Я могу попытаться опубликовать фактический рабочий код позже если у меня будет возможность.