Хорошо, я относительный новичок в программировании на Objective-C / iOS, так что, надеюсь, кто-то с большим знанием здесь может мне помочь.
У меня есть приложение для iPad, использующее шаблон SplitViewController (с Core Data).Я создал еще один UIViewController
(с файлом xib), который называется PlayerViewController.Это представление имеет несколько UILabel
компонентов.
У меня есть список игроков, которые отображаются в RootViewController (UITableView
), и когда вы выбираете игрока, я программно создаю PlayerViewController (в DetailViewController), передаю ему NSManagedObject
, который был переданDetailViewController, попробуйте установить текст одной из меток в представлении PlayerViewController, а затем добавить его в качестве подпредставления к DetailViewController.
Все это прекрасно работает, за исключением установки текста метки в представлении PlayerViewController.Я не уверен, что я делаю неправильно.Я использовал NSLog
, чтобы подтвердить, что NSManagedObject
не ноль и что свойство NSManagedObject
, которое я пытаюсь использовать, имеет правильный текст.
Я в недоумении.Любая помощь будет принята с благодарностью.(Следующий код):
Этот метод находится в файле DetailViewController.m:
- (void)configureView {
// Update the user interface for the detail item.
PlayerViewController *player = [[PlayerViewController alloc] init];
player.player = detailItem;
[self.view addSubview:player.view];
}
Этот метод вызывается, когда пользователь выбирает элемент из RootViewController (эта функция вызывает вызов configureView., настраивается шаблоном, а я его не менял).
Установка свойства player объекта PlayerViewController для объекта detailItem обрабатывается в методе setPlayer этого класса.
- (void)setPlayer:(NSManagedObject *)managedObject {
if (player != managedObject) {
[player release];
player = [managedObject retain];
// Update the view.
[self configureView];
}
}
Затем у меня также есть метод configureView в PlayerViewController, который устанавливает текст метки:
- (void)configureView {
nickName.text = [[player valueForKey:@"Nickname"] description];
NSLog(@"Nickname %@", [[player valueForKey:@"Nickname"] description]);
NSLog(@"Nickname %@", nickName.text);
}
Хорошо, поэтому первый оператор NSLog
печатает желаемое значение, но текст UILabel
(называется nickName) возвращает nil.
Ниже приведены полные файлы PlayerViewController.h & .m:
PlayerViewController.h:
#import <UIKit/UIKit.h>
#import <CoreData/CoreData.h>
@interface PlayerViewController : UIViewController {
NSManagedObject *player;
IBOutlet UILabel *nickName;
IBOutlet UILabel *goalCount;
IBOutlet UILabel *assistCount;
IBOutlet UILabel *timeInGame;
}
@property (nonatomic, retain) IBOutlet UILabel *nickName;
@property (nonatomic, retain) IBOutlet UILabel *goalCount;
@property (nonatomic, retain) IBOutlet UILabel *assistCount;
@property (nonatomic, retain) IBOutlet UILabel *timeInGame;
@property (nonatomic, retain) NSManagedObject *player;
@end
PlayerViewController.m:
#import "PlayerViewController.h"
@implementation PlayerViewController
@synthesize nickName, goalCount, assistCount, timeInGame, player;
#pragma mark -
#pragma mark Managing the detail item
/*
When setting the player item, update the view
*/
- (void)setPlayer:(NSManagedObject *)managedObject {
if (player != managedObject) {
[player release];
player = [managedObject retain];
// Update the view.
[self configureView];
}
}
- (void)configureView {
nickName.text = [[player valueForKey:@"Nickname"] description];
NSLog(@"Nickname %@", [[player valueForKey:@"Nickname"] description]);
NSLog(@"Nickname %@", nickName.text);
}
/*
// The designated initializer. Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad.
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) {
// Custom initialization
}
return self;
}
*/
/*
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
[super viewDidLoad];
}
*/
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Overriden to allow any orientation.
return YES;
}
- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
- (void)viewDidUnload {
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (void)dealloc {
[super dealloc];
}
@end
Я уверен, что мне просто не хватает чего-то тривиального, но я не могу понять это и не смог найти никаких ответов в Интернете.
Спасибо за любую помощь!