我有一个Cocoa应用程序,有一个NSWindowController控制NSWindow与NSComboBox它.没什么特别的,它在升级到OS X 10.7.2之前工作正常.现在我得到以下异常,当窗口控制器的窗口加载时,该异常只发生一次.(由于我的应用程序中的窗口控制器仍然加载,每次应用程序启动时只会发生一次.)随后聚焦和取消聚焦组合框不会触发它.
任何人都知道10.7.2中是否有变化,如果有变化,如何解决它?
(这与Xcode 4.2一起发生.)
2011-10-24 11:30:21.649 MyApp[7934:707] Unlocking Focus on wrong view ((null)), expected <NSComboBox: 0x40083d6e0>
2011-10-24 11:30:21.653 MyApp[7934:707] (
0 CoreFoundation 0x00007fff8412d286 __exceptionPreprocess + 198
1 libobjc.A.dylib 0x00007fff88cdad5e objc_exception_throw + 43
2 CoreFoundation 0x00007fff8412d0ba +[NSException raise:format:arguments:] + 106
3 CoreFoundation 0x00007fff8412d044 +[NSException raise:format:] + 116
4 AppKit 0x00007fff8c76c1d5 -[NSFocusStack unfocusView:] + 194
5 AppKit 0x00007fff8c7e838e +[_NSAutomaticFocusRing showForView:] + 2545
6 AppKit 0x00007fff8cdbb4d1 __postActiveFirstResponderChanged_block_invoke_1 + 32
7 CoreFoundation 0x00007fff840ecf37 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23 …Run Code Online (Sandbox Code Playgroud) 构建一个小型Java Web应用程序以在Servlet容器(如Tomcat)中运行与构建具有内置Web服务器的独立Java应用程序并在反向代理后面运行它有什么好处?
我已经玩Java一年了.我注意到启动Tomcat需要时间,并且由于类加载器问题,并不总是可以进行热重新部署.对我来说,Servlet API似乎有点令人费解,特别是从配置和RESTful设计的角度来看(它并没有真正完全支持).
另一方面,我注意到我的IDE可以以闪电般的速度编译和运行独立的应用程序.配置Apache进行反向代理是一件小事,嵌入式Jetty似乎可以处理我可以抛出的任何东西.当我可以使用Restlet,Wicket等时,我不需要Servlet.能够更好地了解我的应用程序是如何工作的(因为它没有与庞大的应用程序服务器集成)让人感觉更有能力.堆栈跟踪更短.下载大小更小.最终用户配置更容易.我猜测性能可能会更好,因为涉及的软件层较少.
但是,我想起了通常听起来好得令人难以置信的说法.所以我的问题是,为什么我不想让我的网络应用程序独立?Servlet容器给了我和/或我的最终用户我们真正需要但不知道的是什么?
我有一个分页UIScrollView,其中用户水平浏览图像,如Apple的Photos.app.这有效,但现在我正在尝试添加旋转支持.
我已经让视图旋转正常,并设法正确设置contentSize,bounds和subviews框架以适应不同的方向.所以在轮换之前和之后,一切都还可以.
然而,过渡本身很尴尬.第一个图像完美旋转,就好像旋转轴位于图像的死点(滚动视图框).第二个图像"摆动",因为旋转轴位于相同的位置:第一个图像的中心.我从第一张图片越远,"摇摆"越快.
我可以通过在旋转之前覆盖不透明的UIView并在之后隐藏它来掩盖它.但这是一个黑客.必须有一个优雅的方式来做到这一点......
我在Rails功能测试中发送POST请求,如下所示:
post :create, collection: { name: 'New Collection' }
Run Code Online (Sandbox Code Playgroud)
collection 按预期,以JSON编码的表单数据发送.
我无法弄清楚的是如何向URL添加查询.文档说我可以访问请求对象并在发送之前对其进行修改.所以我尝试了这个:
@request.GET[:api_key] = 'my key'
post :create, collection: { name: 'New Collection' }
Run Code Online (Sandbox Code Playgroud)
但是,:api_key永远不会出现在request.GET服务器上的哈希值中.(但是,当我通过另一个HTTP客户端发送它时,它会这样做.)
如果我有一个像这样的方法:
@interface CharacterSet
+ (NSArray *)allCharacterSets;
@end
Run Code Online (Sandbox Code Playgroud)
我可以使用Cocoa绑定绑定它吗?
我正在尝试将NSComboBox的内容值连接到它.当我进入CharacterSet.allCharacterSetsIB中的"模型密钥路径"字段时,它不起作用,说:
[addObserver:forKeyPath:@"CharacterSet.allCharacterSets"选项:0x0上下文:0x200275b80]被发送到与"CharacterSet"属性不符合KVC的对象.
我不知道还有什么可以尝试的.目前我必须allCharacterSets在我的自定义窗口控制器(或自定义窗口)中将返回值存储到ivar中以使其工作,这似乎是我不应该采取的额外步骤.
我有一个NSOpenPanel,我想在用户点击OK后对选择进行一些验证.我的代码很简单:
void (^openPanelHandler)(NSInteger) = ^(NSInteger returnCode) {
if (returnCode == NSFileHandlingPanelOKButton) {
// do my validation
[self presentError:error]; // uh oh, something bad happened
}
}
[openPanel beginSheetModalForWindow:[self window]
completionHandler:openPanelHandler];
Run Code Online (Sandbox Code Playgroud)
[self window]是一个应用程序模式窗口.面板将作为工作表打开.到现在为止还挺好.
Apple的文档说完成处理程序应该在用户关闭面板后调用.但在我的情况下,按下"确定/取消"按钮后立即调用,而不是在面板关闭时调用.这样做的结果是错误警报在打开的面板上方打开,而不是在面板关闭后打开.它仍然有效,但它不像Mac那样.
我更喜欢的是用户单击确定,打开面板表格折叠,然后显示警报表.
我想我可以使用延迟选择器来呈现警报,但这似乎是一个黑客.
我正在接受用户输入的图像。我只想允许 JPEG 图像。图像作为 InputStream 到达(myInputStream下面称为)。在下面的代码中,返回的 IteratorImageIO.getImageReaders()始终为空。
ImageInputStream imageInputStream = ImageIO.createImageInputStream(
myInputStream);
Iterator<ImageReader> iter = ImageIO.getImageReaders(imageInputStream);
if (!iter.hasNext()) {
// this always happens
}
ImageReader reader = (ImageReader) iter.next();
if (!reader.getFormatName().equals("jpeg")) {
// haven't got this far yet
}
Run Code Online (Sandbox Code Playgroud)
我也试过myInputStream直接传递到ImageIO.getImageReaders()相同的结果。
我已经从MacPorts安装了Ghostscript,并且我试图从PHP脚本调用它来从多页PDF文件中提取单页然后输出它.我的代码看起来像这样:
<?php
$cmd = '/opt/local/bin/gs -sDEVICE=pdfwrite -dNOPAUSE \
-dBATCH -dSAFER -dFirstPage=20 -dLastPage=20
-sOutputFile=%stdout "/path/to/input/pdf.pdf"';
// Will uncomment this when it works
// header("Content-Type: application/pdf");
putenv("GS_LIB=/opt/local/share/ghostscript/9.02/lib");
putenv("GS_FONTPATH=/opt/local/share/ghostscript/fonts");
putenv("TMPDIR=/tmp");
passthru($cmd);
Run Code Online (Sandbox Code Playgroud)
当我在网络浏览器中点击此脚本时,我看到:
GPL Ghostscript 9.02 (2011-03-30) Copyright (C) 2010 Artifex Software, Inc.
All rights reserved. This software comes with NO WARRANTY: see the file
PUBLIC for details. **** Unable to open the initial device, quitting.
Run Code Online (Sandbox Code Playgroud)
相同的命令来自shell.
我正在尝试获取从超类继承的PHP类的绝对路径名.看起来应该很简单.我认为下面的代码尽可能简洁地解释了它:
// myapp/classes/foo/bar/AbstractFoo.php
class AbstractFoo {
public function getAbsolutePathname() {
// this always returns the pathname of AbstractFoo.php
return __FILE__;
}
}
// myapp/classes/Foo.php
class Foo extends AbstractFoo {
public function test() {
// this returns the pathname of AbstractFoo.php, when what I
// want is the pathname of Foo.php - WITHOUT having to override
// getAbsolutePathname()
return $this->getAbsolutePathname();
}
}
Run Code Online (Sandbox Code Playgroud)
我不想覆盖的原因getAbsolutePathname()是会有很多类扩展AbstractFoo,在文件系统的许多不同的地方(Foo实际上是一个模块),它似乎违反了DRY.
我的主菜单(MainMenu.xib)中有一个名为"Word Wrap"的NSMenuItem.它的值绑定到我的共享用户默认控制器,也在XIB中实例化.它在选择时还会发送以下操作:
- (IBAction)toggleWordWrap:(id)sender {
NSUserDefaultsController *ctrlr = [NSUserDefaultsController sharedUserDefaultsController];
if ([[[ctrlr values] valueForKey:@"wordWrapIsEnabled"] boolValue]) {
// turn on word wrap
} else {
// turn off word wrap
}
}
Run Code Online (Sandbox Code Playgroud)
在我的app delegate +initialize方法中,我使用默认值填充标准用户默认值:
+ (void)initializeDefaults {
NSDictionary *defaults = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:NO], @"wordWrapIsEnabled",
// etc.
nil];
NSUserDefaultsController *ctrlr = [NSUserDefaultsController sharedUserDefaultsController];
[ctrlr setInitialValues:defaults];
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我的NSMenuItem状态与我的用户默认值不同步.以下是发生的事情的时间表:
应用发布:
wordWrapIsEnabled 没有第一次选择Word Wrap:
wordWrapIsEnabled不是(BZZZT WRONG)第二次选择Word Wrap:
wordWrapIsEnabled是(BZZZT …java ×2
php ×2
autorotate ×1
cocoa ×1
ghostscript ×1
iphone ×1
nsmenuitem ×1
nsopenpanel ×1
nsresponder ×1
nssavepanel ×1
nswindow ×1
osx-lion ×1
pathname ×1
servlets ×1
uiscrollview ×1
xcode4.2 ×1