NSlogging и NSString Conundrum - PullRequest
       1

NSlogging и NSString Conundrum

0 голосов
/ 16 сентября 2011

Я все еще новичок в этом деле, поскольку это мой первый проект и все. Но я полностью верю в сообщество переполнения стека, поскольку вы все помогали мне раньше.

У меня есть довольно интересная головоломка для всех вас. Я называю стандарт:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

в моем табличном представлении, чтобы он выдвинул контроллер представления и обновил значение строки (метод ниже) (изменение строки NSLogged другим методом):

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
appDelegate.baseURL = nil;
musicInteractionController = [[xSheetMusicViewController alloc]init];
if (indexPath.row == 0 && indexPath.section == 0) {
    appDelegate.baseURL = @"mussette.pdf";
    [self.navigationController pushViewController:musicInteractionController animated:YES];
}
else if (indexPath.row == 1 && indexPath.section == 0) {
    appDelegate.baseURL = @"Importing PDF's.pdf";
    [self.navigationController pushViewController:musicInteractionController animated:YES];

}
else if (indexPath.row == 2 && indexPath.section == 0) {
   appDelegate.baseURL = @"Example.pdf";
    [self.navigationController pushViewController:musicInteractionController animated:YES];

}
else if (indexPath.section == 1) {
    appDelegate.baseURL = [[ivContentsList objectAtIndex:indexPath.row]lastPathComponent];
    [self.navigationController pushViewController:musicInteractionController animated:YES];

}
[musicInteractionController release]; musicInteractionController = nil;
appDelegate.baseURL = nil;

}

В моем коде нет ошибок, предупреждений или утечек памяти. И изменение в строке читается новым контроллером представления, который обновляет представление для отображения текущего PDF. Он работает правильно, но продолжает отображать один и тот же PDF снова и снова, несмотря на изменение значения NSLog. Если это помогает, я использую симулятор iOS, а не реальное устройство.

Вот пример NSLog после нажатия на первую ячейку, затем на вторую (игнорируйте журнал контроллера nil view, я думаю, что это ошибка. Кроме того, Log down от частного метода во втором представлении, поэтому он также может быть проигнорированным. И бонус для тех, кто может решить CGContextClipToRect: недопустимый контекст 0x0 предупреждение):

 2011-09-15 16:24:23.731 SheetMuse[43068:b603] value - (null)
Sep 15 16:24:27-MacBook SheetMuse[43068] <Error>: CGContextClipToRect: invalid context 0x0
Sep 15 16:24:27-MacBook SheetMuse[43068] <Error>: CGContextGetClipBoundingBox: invalid context 0x0
Sep 15 16:24:27-MacBook SheetMuse[43068] <Error>: CGContextConcatCTM: invalid context 0x0
Sep 15 16:24:27-MacBook SheetMuse[43068] <Error>: CGBitmapContextCreateImage: invalid context 0x0
2011-09-15 16:24:27.050 SheetMuse[43068:b603] Application tried to push a nil view controller on target <UINavigationController: 0x4c5e220>.
2011-09-15 16:24:27.069 SheetMuse[43068:b603] value - mussette.pdf
2011-09-15 16:24:27.072 SheetMuse[43068:b603] Application tried to push a nil view controller on target <UINavigationController: 0x4e74620>.
2011-09-15 16:24:27.097 SheetMuse[43068:b603] value - mussette.pdf
2011-09-15 16:24:33.944 SheetMuse[43068:b603] Down
Sep 15 16:24:36 MacBook-SheetMuse[43068] <Error>: CGContextClipToRect: invalid context 0x0
Sep 15 16:24:36 MacBook-SheetMuse[43068] <Error>: CGContextGetClipBoundingBox: invalid context 0x0
Sep 15 16:24:36 MacBook-SheetMuse[43068] <Error>: CGContextConcatCTM: invalid context 0x0
Sep 15 16:24:36 MacBook-SheetMuse[43068] <Error>: CGBitmapContextCreateImage: invalid context 0x0
2011-09-15 16:24:36.587 SheetMuse[43068:b603] Application tried to push a nil view controller on target <UINavigationController: 0x4c54bf0>.
2011-09-15 16:24:36.588 SheetMuse[43068:b603] value - Importing PDF's.pdf
2011-09-15 16:24:36.590 SheetMuse[43068:b603] Application tried to push a nil view controller on target <UINavigationController: 0x4c50790>.
2011-09-15 16:24:36.591 SheetMuse[43068:b603] value - Importing PDF's.pdf

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

Ответы [ 2 ]

2 голосов
/ 16 сентября 2011

Вот пример NSLog после нажатия первой ячейки, затем второй (игнорировать журнал контроллера nil view, я думаю, что это ошибка. Кроме того, Журнал вниз из частного метода во втором представлении, так что он также может быть проигнорированным И бонус для тех, кто может разрешить CGContextClipToRect: недопустимый контекст, предупреждение 0x0)

Я знаю, что заманчиво думать, что они не связаны, но важно помнить, что ошибки похожи на снежки - они накапливают больше снега, когда начинают катиться.

musicInteractionController = [[xSheetMusicViewController alloc]init];

Журнал, похоже, указывает, что ваш musicInteractionController равен нулю. Я не видел ваш код инициализации для xSheetMusicViewController (кстати, я рекомендую использовать предложения Apple для именования классов и переменных: классы начинаются с верхнего регистра, а переменные начинаются с нижнего регистра), я не могу сказать, почему, но подкласс UIViewController, вероятно, должен использовать - (id) initWithNibName: (NSString *) комплект nibName: (NSBundle *) nibBundle для init.

Я предполагаю, что если вы решите nil view controller, то вы исправите и другие ошибки.

Обновление

Из документов Apple:

Это назначенный инициализатор для этого класса.

Указанный вами файл пера загружается не сразу. Загружен При первом обращении к представлению контроллера представления. Если хотите выполнить дополнительную инициализацию после загрузки пера, переопределите метод viewDidLoad и выполните там свои задачи.

Если вы укажете nil для параметра nibName, вы должны либо переопределить метод loadView и создайте свои представления там, или вы должны предоставить nib-файл в вашем комплекте, чье имя (без расширения .nib) соответствует имени вашего класса контроллера представления. (В этом последнем случае имя класса становится именем, хранящимся в свойстве nibName.) Если если вы ничего не сделаете, контроллер представления не сможет загрузить его вид.

Итак, все должно быть настроено в методе loadView для класса. Можете ли вы показать нам, как вы реализовали этот метод?

1 голос
/ 16 сентября 2011

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

Попробуйте вызвать индекс с этим:

int someIndexVar = [indexPath indexAtPosition: [indexPath length] - 1];

и попробуйте

if (someIndexVar == 0 && someIndexVar.section == 0) {

EDIT: добавить

return cell;

после каждого элемента в каждом, если каждое утверждение, т.е.:

if (this){
    code
    return cell;
} else if (this){
    code 
    return cell;
} else {
    code
    return cell;
}

Большинство людей говорят, что ячейку не нужно возвращать каждый раз, но она должна делать, так как это оператор if, и она возвращает ячейку, только если выбрано, что решило проблему для меня

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