Проблема с пользовательским классом в Objective-C - PullRequest
0 голосов
/ 22 июня 2011

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

Итак, я создаю «Основное приложение для навигации».Я добавляю другой UITableViewController с именем TableViewController (тот, который создается с проектом, называется RootViewController).Я создаю экземпляр TableViewController, когда касаюсь строки в RootViewController.

Я создаю собственный класс с именем «MyCustomClass».

MyCustomClass.h (полный код):

#import <Foundation/Foundation.h>

@interface MyCustomClass : NSObject {
    NSString *name;
}

@property (nonatomic, retain) NSString * name;

@end

MyCustomClass.m (полный код):

#import "MyCustomClass.h"

@implementation MyCustomClass

@dynamic name;

@end

У меня был атрибут MyCustomClass в классе TableViewController.

TableViewController.h (полный код):

#import <UIKit/UIKit.h>
#import "MyCustomClass.h"

@interface TableViewController : UITableViewController {
    MyCustomClass *aCustomObject;
}

@property (nonatomic, retain) MyCustomClass *aCustomObject;

@end

При загрузке TableViewController я пытаюсь отобразитьСодержимое aCustomObject.

TableViewController.m (начало файла и то, что я изменяю в файле шаблона):

#import "TableViewController.h"

@implementation TableViewController

@synthesize aCustomObject;

#pragma mark -
#pragma mark View lifecycle

- (void)viewDidLoad {
    [super viewDidLoad];

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem;
    NSLog(@"Name : %@",self.aCustomObject.name);
}

До этого я создаю и даю значениеaCustomObject.name в RootViewController:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
     TableViewController *detailViewController = [[TableViewController alloc] initWithNibName:@"TableViewController" bundle:nil];
    detailViewController.aCustomObject.name = @"The Name";
    [self.navigationController pushViewController:detailViewController animated:YES];
}

Консоль сказала:

2011-06-22 07: 21: 11.087 MyTestApp [12822: 207] Имя: (ноль)

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

Большое спасибо и извините за мои английские ошибки,

Ответы [ 2 ]

2 голосов
/ 22 июня 2011

Вы используете ключевое слово @dynamic, чтобы сообщить компилятору, что вы будете выполнять контракт API, подразумеваемый свойством, либо предоставляя реализации методов напрямую, либо во время выполнения, используя другие механизмы, такие как динамическая загрузка кода или динамическое разрешение методов.Он подавляет предупреждения, которые в противном случае генерирует компилятор, если он не может найти подходящие реализации.Вам следует использовать его, только если вы знаете, что методы будут доступны во время выполнения.

из Документация Apple

Вы утверждаете в вопросе, который вы включилиполный источник для MyCustomClass.m.Где вы реализовали метод получения и установки свойства?Если вы хотите, чтобы компилятор генерировал методы для вас, вы должны использовать

@synthesize name;
2 голосов
/ 22 июня 2011

Вы забыли инициализировать свой пользовательский объект в методе viewDidLoad tableViewController.

Попробуйте это.

- (void)viewDidLoad {
[super viewDidLoad];
if(aCustomObject == nil){
   self.aCustomObject = [[[MyCustomClass alloc] init] autoRelease];
 }
self.aCustomObject.name = @"";
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
 //this will show empty here.
NSLog(@"Name : %@",self.aCustomObject.name);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...