DetailViewController 不能设置网点?
Posted
技术标签:
【中文标题】DetailViewController 不能设置网点?【英文标题】:DetailViewController can't set outlets? 【发布时间】:2013-10-30 00:33:47 【问题描述】:您好,我遇到了一个问题,即 DetailViewController 不想设置 UILabel 插座,这是一个主从应用程序模板,当我按下一个单元格时会发生这种情况
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
if ([[segue identifier] isEqualToString:@"showDetail"])
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
// here it accordingly sets the ObjectItem to my custom object.
Torrent *object = _torrents[indexPath.row];
[[segue destinationViewController] setObjectItem:object];
这里是我在 DetailViewController viewDidLoad 中调用的方法
- (void)configureView
// Since i set the objectItem earlier it works, it set the outlets
if (self.objectItem)
theTitle.text = self.objectItem.MovieTitleClean;
genre.text = self.objectItem.Genre;
size.text = self.objectItem.Size;
quality.text = self.objectItem.Quality;
rating.text = self.objectItem.MovieRating;
year.text = self.objectItem.MovieYear;
if (self.detailObject)
ShortDescription.lineBreakMode = NSLineBreakByWordWrapping;
self.details = [_detailObject objectAtIndex:0];
NSLog(@"Called"); // this is called meaning it should set the outlets but it doesn't...
resolution.text = self.details.Resolution;
framerate.text = self.details.FrameRate;
language.text = self.details.Language;
peersSeeds.text = [NSString stringWithFormat:@"%@/%@",self.details.TorrentPeers,self.details.TorrentSeeds];
downloaded.text = self.details.Downloaded;
ShortDescription.text = self.details.ShortDescription;
在 DetailViewController viewDidLoad 中,我调用 configureView 将 UILabel 出口设置为我的自定义 objectItem 并且效果很好,但是当我从委托接收新的 detailObject 并根据该新 detailObject 设置其他 UILabel 时,似乎根本没有设置任何内容(注意)视图已经加载,并且 NSlog 显示我调用了 configureView 这意味着它假设设置插座,我必须等待 15 秒,它会自动设置它们,有没有人知道为什么视图不回应?它首先做到了。谢谢
编辑:这是 .h 文件
#import <UIKit/UIKit.h>
#import "TorrentDetail.h"
#import "YifyAPI.h"
#import "Torrent.h"
@interface DetailViewController : UIViewController <YifyAPIDelegate>
IBOutlet UILabel *theTitle;
IBOutlet UILabel *genre;
IBOutlet UILabel *size;
IBOutlet UILabel *quality;
IBOutlet UILabel *rating;
IBOutlet UILabel *year;
IBOutlet UILabel *resolution;
IBOutlet UILabel *framerate;
IBOutlet UILabel *language;
IBOutlet UILabel *peersSeeds;
IBOutlet UILabel *downloaded;
IBOutlet UILabel *ShortDescription;
IBOutlet UIImageView *LargeImageCover;
@property (strong, nonatomic) Torrent *objectItem;
@property (strong, nonatomic) TorrentDetail *detailObject;
@end
【问题讨论】:
【参考方案1】:这是正常的,因为当你加载控制器时,对象并没有被设置,然后你加载它来解决这个问题你可以这样做,在你的 detailControll 中,你像这样实现你的对象的设置器:
-(void)setObjectItem:(Torrent *)object
if(_objectItem != object)
_objectItem = object;
theTitle.text = self.objectItem.MovieTitleClean;
genre.text = self.objectItem.Genre;
size.text = self.objectItem.Size;
quality.text = self.objectItem.Quality;
rating.text = self.objectItem.MovieRating;
year.text = self.objectItem.MovieYear;
-(void)setDetailObject:(NSArray *) detailObject
if(_detailObject != detailObject)
_detailObject = detailObject;
ShortDescription.lineBreakMode = NSLineBreakByWordWrapping;
self.details = [_detailObject objectAtIndex:0];
NSLog(@"Called"); // this is called meaning it should set the outlets but it doesn't...
resolution.text = self.details.Resolution;
framerate.text = self.details.FrameRate;
language.text = self.details.Language;
peersSeeds.text = [NSString stringWithFormat:@"%@/%@",self.details.TorrentPeers,self.details.TorrentSeeds];
downloaded.text = self.details.Downloaded;
ShortDescription.text = self.details.ShortDescription;
【讨论】:
这正是我为他们所做的,只是在最后调用 [self configureView]。 所以如果我解决了你的问题,你能不能给我接受答案,不给我+1,我想拿一个特殊的徽章 问题依然存在,我的意思是这两个对象都有你刚才写的方法,但是detailObject仍然没有显示在视图中。 确定是 - (void)didReceiveTorrentDetails:(NSArray*)torrentDetails NSLog(@"recieved torrent detials"); if (_detailObject != torrentDetails) _detailObject = torrentDetails; [自我配置视图]; 仍然没有成功:/我很确定它应该可以工作,但是在调用 NSLog(@"Called") 后视图似乎冻结了,然后当我等待 15 秒时,它会自动设置它们。 . 如此随意【参考方案2】:要在从故事板加载的视图控制器中配置属性,不要依赖 viewDidLoad: 来初始化属性。文档中的here 和here 都说要覆盖awakeFromNib
来进行配置。
// In your Detail View Controller
- (void) awakeFromNib
[self configureView];
// Do any other configuration here
【讨论】:
我无法从 awakeFomNib 请求 torrent 详细信息。这不是问题所在,即使 NSLog 显示 UILabels 中应该有文本,视图也没有显示出口的任何变化,但我在视觉上看不到任何东西 如果这是在故事板中创建的,您是否在 Interface Builder 中连接了插座?抱歉,我很难理解你的意思。以上是关于DetailViewController 不能设置网点?的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有 UINavigationController 的情况下为 detailViewController 视图设置动画?
DetailViewController 在创建新对象时不显示
为啥 DetailViewController 使用 Tabbar 和 Navigation Controller 弹出到第一个 DetailViewController?
iPhone TabBarController - 以编程方式设置选定的选项卡