如前所述——我是一名 Objective-C 新手,但在阅读了 4 本关于该主题的实体书以及大量电子书和文档后,我仍然找不到我要找的东西。
我有一个顶层内容 View Controller ,它想根据应用程序委托(delegate)的窗口属性的物理维度配置其 View 属性。这是一些人已经问过的问题。 ([UIScreen mainScreen] 由于之前在本论坛上多次播出的原因而没有将其删除)。因此,逻辑方法是让内容 View Controller 读取应用程序委托(delegate)窗口的框架。现在,我发现的唯一接近于此的答案是使用 [[[UIApplication sharedApplication] window] frame] - 但是,这仅在 window 属性设置为 keyAndVisible 后才有效。内容 View Controller 需要在获取 makeKeyAndVisible 之前读取应用委托(delegate)的窗口属性。。代码按此顺序......
应用委托(delegate):
- (BOOL) application: (UIApplication *) application didFinishLaunchingWithOptions: (NSDictionary *) launchOptions {
// This next line is a test window frame for R&D purposes....
[self setWindow: [[UIWindow alloc] initWithFrame: CGRectMake(0.0f, 20.0f, 320.0f, 320.0f)]];
if ([self window]) {
contentViewController = [[ContentViewControl alloc] initWithNibName: nil bundle: nil]; // Content view controller instantiated here
if (contentViewController) {
[[self window] addSubview: [contentViewController view]];
[[self window] layoutSubviews];
[[self window] makeKeyAndVisible]; // Window made key and visible here
return YES;
}
}
return NO;
}
在我的内容 View Controller 的 initWithNibName: nil bundle: nil 方法中,我有以下测试代码...
- (id) initWithNibName: (NSString *) nibNameOrNil bundle: (NSBundle *) nibBundleOrNil {
self = [super initWithNibName: nibNameOrNil bundle: nibBundleOrNil];
if (self) {
NSLog(@"%@", NSStringFromCGRect([[[UIApplication sharedApplication] keyWindow] frame]));
// This does not work.
}
return self;
}
这不起作用,因为 App Delegate 的窗口还不是关键的和可见的。
所以,我的问题是这样;我的 App Delegate 类实例的名称是什么?我知道 App Delegate 的 Class 名称默认为 myApplicationNameAppDelegate 但我使用的是 instance 名称。我想用类似的东西替换对 [[UIApplication sharedApplication] keyWindow] 的调用;
[myAppDelegatesInstanceName window].
稍微扩展一下,一个人如何访问其他目标对象中的方法,这些目标对象不是执行查询的对象的范围后代?
就像我说的,我对这一切完全是菜鸟,这可能是另一个愚蠢的菜鸟问题,但似乎还没有人以简单的方式回答过这个问题。
(在程序上 - 我的主场 - 有很多方法可以将窗口的东西放到其他级别的范围内,从让整个程序套件全局访问窗口到通过各种方法将它作为特定参数传递下去功能层次结构——但这个客观的东西似乎背离了既定的程序实践)。
如果有人能提供帮助,我将不胜感激。这玩意绝对不直观! V.V.
最佳答案
您可以通过单例 UIApplication 实例访问应用委托(delegate):
[[[UIApplication sharedApplication] delegate] window];
不过,这是一种特殊情况,因为您可以访问一个对象(UIApplication 实例),您知道该对象的委托(delegate)就是您要访问的对象。一般情况:
Expanding this a little, how does one access methods in other target objects that are not scope descendants of the object doing the querying?
您需要将对目标对象的引用传递给您要从中访问它的对象。这有时是必要的,但这也意味着您在这两个对象之间引入了紧密耦合,如果可以的话,您通常希望避免这种情况。因此,请考虑每种情况,看看是否还有其他可能的设计。
关于ios - 如何从另一个对象访问我的 Application Delegate 的窗口访问器方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5760785/
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
我正在尝试设置一个puppet节点,但rubygems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由rubygems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
在控制台中反复尝试之后,我想到了这种方法,可以按发生日期对类似activerecord的(Mongoid)对象进行分组。我不确定这是完成此任务的最佳方法,但它确实有效。有没有人有更好的建议,或者这是一个很好的方法?#eventsisanarrayofactiverecord-likeobjectsthatincludeatimeattributeevents.map{|event|#converteventsarrayintoanarrayofhasheswiththedayofthemonthandtheevent{:number=>event.time.day,:event=>ev
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
我想了解Ruby方法methods()是如何工作的。我尝试使用“ruby方法”在Google上搜索,但这不是我需要的。我也看过ruby-doc.org,但我没有找到这种方法。你能详细解释一下它是如何工作的或者给我一个链接吗?更新我用methods()方法做了实验,得到了这样的结果:'labrat'代码classFirstdeffirst_instance_mymethodenddefself.first_class_mymethodendendclassSecond使用类#returnsavailablemethodslistforclassandancestorsputsSeco