Задать вопрос
deleted-mezhevikin
@deleted-mezhevikin

Разбивка большого класса на категории в objective-c?

Есть класс PlayerViewController с большим количеством методов, хочу разбить его на категории, но нет понимая как это сделать так чтобы подключая PlayerViewController.h были доступны методы из всех его категорий.


Как пробовал:


Создаю категорию Timer.

//
// PlayerViewController+Timer.h
//

@interface PlayerViewController (Timer)

- (void)testMethod;

@end


//
//PlayerViewController+Timer.m
//

#import "PlayerViewController.h"
#import "PlayerViewController+Timer.h"

@implementation PlayerViewController (Timer)

- (void) testMethod
{
    NSLog(@"test");
}

@end



В основном классе пытаюсь вызвать теперь метод testMethod из категории:

//
//  PlayerViewController.h
//

#import <Foundation/Foundation.h>
#import "PlayerViewController+Timer.h"

@interface PlayerViewController : UIViewController
    
@end


//
//  PlayerViewController.m
//

#import "PlayerViewController.h"

@implementation PlayerViewController

- (void)viewDidLoad
{
    [self testMethod];
}

@end



Ошибки:

/Users/user/Desktop/Projects/SplitClass/PlayerViewController+Timer.h:5:12: Cannot define category for undefined class 'PlayerViewController'
/Users/user/Desktop/Projects/SplitClass/SplitClass/PlayerViewController.m:11:11: No visible @interface for 'PlayerViewController' declares the selector 'testMethod'


Edit1: Конечный пример решения
github.com/nullproduction/SplitClass
  • Вопрос задан
  • 3942 просмотра
Подписаться 4 Оценить Комментировать
Решения вопроса 1
silvansky
@silvansky
Первая ошибка — в том, что PlayerViewController не определён в момент объявления категории. Вторая вытекает из первой — категория не объявлена, а значит и метода нет.

Если Вам очень хочется импортить лишь один хедер для всех категорий, то мой вариант решения таков:

Файл PlayerViewControllerMain.h: основные дкларации (без категорий)

Файлы PlayerViewController+{Category1|Category2|...}.h: декларации категорий, каждый импортит PlayerViewControllerMain.h

Файл PlayerViewController.h: включает в себя все вышеуказанные файлы для простого доступа ко всем категориям сразу
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
deleted-mezhevikin
@deleted-mezhevikin Автор вопроса
Файлы PlayerViewController+{Category1|Category2|...}.h: декларации категорий, каждый импортит PlayerViewControllerMain.h

И категории для PlayerViewControllerMain делаем?

Вроде все сделал как вы сказали, не помогло.

Код этого тестового проекта — www.dropbox.com/s/x7wiwvababgcho2/SplitClass.zip
Ответ написан
Имхо еще полезно попробовать AppCode (http://www.jetbrains.com/objc/), свою стоимость оправдывает на 146%. Для начала можно попробовать EAP, а там и до распродажи недолго.
Отдельным плюсом можно считать единообразие этой ide для разных платформ — java, php, objc, html/css — везде почти одинаковые хоткеи и внешний вид, для меня актуально.

Если немного поковыряться и изучить его возможности, то он может сильно помочь и «писать» (генерировать) много кода за разработчика.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы