Я уже некоторое время пытаюсь заставить таблицу работать правильно.Каждый день я делаю небольшие успехи, но не могу увидеть какие-либо отзывы, протестировав приложение, поэтому я не уверен, правильно ли я что-то делаю или нет.
Я искал в GoogleНекоторое время я смотрел на документы Apple, но я все еще не понимаю, как правильно заполнить UITableView.
Первая проблема.Где взять камеру?Мне нужно сделать собственную ячейку для отображения данных.Кажется, что решение заключается в использовании пера, но как я могу загрузить его на другой контроллер представления?
Вторая проблема.Эта ячейка, очевидно, должна иметь динамическое содержимое.Это содержимое будет получено из настроек пользователя по умолчанию (я могу это сделать), но я не знаю, как мне получить доступ к меткам в перьях для достижения этой цели.
Третья проблема.Я хочу иметь разные разделы (каждый раздел имеет свой вид ячейки для отображения), с разными колонтитулами.Как всегда, здесь мне не хватает документации.Как мне этого добиться?
Четвертая и самая важная проблема.У меня нет идеи о том, как загрузить клетки.По-видимому, это делает cellForRowAtIndexPath
, но я не уверен, как ему это удается.
Наконец, вот код (вместе с трассировкой стека).Надеюсь, ты сможешь мне помочь. Пожалуйста, не закрывайте это для дубликата.Во-первых, это не должно быть, во-вторых, это не дубликат, если дублирующий вопрос был задан 3+ года назад из-за того, сколько библиотек было обновлено.
#import "profileViewController.h"
#import "../Objs/CCProfileObject.h"
@interface profileViewController ()
@property (weak, nonatomic) IBOutlet UITableView *tableView;
@property (strong, nonatomic) IBOutlet UITableViewCell *proxySampleCell;
@property (strong, nonatomic) IBOutlet UITableViewCell *ccSampleCell;
@end
@implementation profileViewController
@synthesize tableView;
- (void)viewDidLoad{
// Dark mode, you can skip all of this
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(changeColor:)
name:@"darkToggle" object:nil];
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
if([userDefaults boolForKey:@"darkMode"] == YES){
[self changeColor:nil];
}
}
- (void)viewDidAppear:(BOOL)animated{
// Display profiles
NSData *arrayData = [[NSUserDefaults standardUserDefaults] objectForKey:@"profileArray"];
NSArray *profiles = [NSKeyedUnarchiver unarchiveObjectWithData:arrayData];
for(NSObject *profile in profiles){
if([profile class] == [CCProfileObject class])
{
CCProfileObject *ccProfile = (CCProfileObject*) profile;
printf("%s\n", [ccProfile.getName UTF8String]);
// Retrieve info from the object
// Duplicate cell
// Change appropriate labels
// Add cell to a specific section
}
// Different types of cells will be added later
// Concept is the same, what changes is the specific section and cell to duplicate
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
if(indexPath.section == 1){
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"reusableShippingCell"];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"reusableShippingCell"];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
cell.textLabel.text = @"aldo";
return cell;
}
return nil;
}
// This should be the only part that actually works (I use the same class twice because proxy and shipping are not yet done)
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
// Display profiles
NSData *arrayData = [[NSUserDefaults standardUserDefaults] objectForKey:@"profileArray"];
NSArray *profiles = [NSKeyedUnarchiver unarchiveObjectWithData:arrayData];
NSMutableArray *sectionData = [[NSMutableArray alloc]init];
for(NSObject *profile in profiles){
// Credit
if([profile class] == [CCProfileObject class])
{
[sectionData insertObject:@1 atIndex:0];
}
// Shipping
else if([profile class] == [UIImage class])
{
[sectionData insertObject:@1 atIndex:1];
}
// Proxy
else if([profile class] == [UIImage class])
{
[sectionData insertObject:@1 atIndex:2];
}
}
int toReturn = 0;
for(int i = 0; i < [sectionData count]; i++){
toReturn += [[sectionData objectAtIndex:i] integerValue];
}
return toReturn;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
// Credit card section
if(section == 0){
return 1;
} else if (section == 1){
return 2;
} else {
return 3;
}
}
`Assertion failure in -[UITableView _configureCellForDisplay:forIndexPath:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit/UIKit-3698.52.10/UITableView.m:9453
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView (<UITableView: 0x16106d000; frame = (0 0; 375 812); clipsToBounds = YES; autoresize = W+H; gestureRecognizers = <NSArray: 0x1d0243bd0>; layer = <CALayer: 0x1d0030f60>; contentOffset: {0, -88}; contentSize: {375, 117}; adjustedContentInset: {88, 0, 83, 0}>) failed to obtain a cell from its dataSource (<profileViewController: 0x15ff14c70>)
First throw call stack:
(0x1837f6d8c 0x1829b05ec 0x1837f6bf8 0x1841e6fa0 0x18d4975b0 0x18d4941e8 0x18d493e00 0x18d492b1c 0x18d48e668 0x18d3cb770 0x18796d25c 0x1879713ec 0x1878ddaa0 0x1879055d0 0x18d7b56b4 0x18379f2bc 0x18379ea7c 0x18379c7b0 0x1836bcda8 0x18569f020 0x18d69d78c 0x1048a4f90 0x18314dfc0)
libc++abi.dylib: terminating with uncaught exception of type NSException
Вы не обязаны решать все мои проблемы одним ответом.Достаточно даже решить проблему / объяснить, что мне нужно сделать, поскольку это позволит мне хотя бы немного продвинуться вперед.