该应用程序打开一个对话框,NSOpenPanel允许用户选择图像.当我选择图像并选择"打开"时,我收到以下错误:
2016-11-03 10:23:25.589283 PA位置数据[9008:265214] [布局]检测到NSTextField的缺失约束:0x6000001e3a00.它无法放置,因为没有足够的约束来完全定义大小和原点.添加缺少的约束,或设置translatesAutoresizingMaskIntoConstraints = YES,并为您生成约束.如果此视图在macOS 10.12及更高版本上手动布局,您可以选择不从覆盖中调用[super layout].在DETECTED_MISSING_CONSTRAINTS上设置断点以进行调试.此错误仅记录一次.
公开对话然后冻结,不能被解雇.
正如所建议的那样,我为DETECTED_MISSING_CONSTRAINTS设置了一个断点,并DETECTED_MISSING_CONSTRAINTS在此代码中发现执行正在暂停:
func happyAlert(message: String, info: String) {
let myPopup: NSAlert = NSAlert()
myPopup.messageText = message
myPopup.informativeText = info
myPopup.alertStyle = NSAlertStyle.informational
myPopup.addButton(withTitle: "OK")
myPopup.runModal()
}
Run Code Online (Sandbox Code Playgroud)
此警报通知用户图像已通过或未通过各种验证检查.
过去发生的事情是图像被选中,被myPopup.runModal()解雇和警报出现没有任何问题.
现在我得到了关于NSTextField的约束的错误,但是我不明白它们为什么会在这里涉及,特别是因为xCode没有标记任何与底层视图的自动布局问题.
任何人都可以解释可能发生的事情和/或进一步调试的策略吗?我的经历有限,我很困惑.
如何使用Cocoa为我的应用程序的Dock图标添加徽章?有没有大致"标准化"的方法来做到这一点?
(我指的是在Mail,iChat等中显示的那种徽章,用于表示未读消息的数量等.)
Cocoa Touch确实提供了一种这样的方法,但我还没能找到常规Cocoa应用程序的任何等价物.
所以这是向图层添加滤镜的标准方法:
NSView *view = self.window.contentView;
view.wantsLayer = YES;
CATextLayer *textLayer = [CATextLayer layer];
textLayer.frame = CGRectMake(10.0, 10.0, 200.0, 100.0);
textLayer.string = @"foo";
textLayer.foregroundColor = [[NSColor redColor] CGColor];
// Add filter
CIFilter *filter = [CIFilter filterWithName:@"CIGaussianBlur" keysAndValues:@"inputRadius", @5.0, nil];
textLayer.filters = @[filter];
// Attach layer
[view.layer addSublayer:textLayer];
Run Code Online (Sandbox Code Playgroud)
但是,它在OS X Mavericks上崩溃了我的应用程序.习惯于10.8工作.
2013-10-23 13:09:20.767 Serus[3608:303] *** Terminating app due to uncaught exception 'CAInvalidCIFilter', reason: 'CI filters are not supported by this layer tree: {CIGaussianBlur {
inputImage = "<null>";
inputRadius = 10;
}}.'
Run Code Online (Sandbox Code Playgroud)
此层树不支持CI过滤器 …
检测用户是否已启用此API的可靠方法是什么?
CGWindowListCreateImage即使禁用了屏幕录制API,也将返回有效对象。可能有多种组合(kCGWindowListOptionIncludingWindow,kCGWindowListOptionOnScreenBelowWindow),只有一些组合会返回NULL。
- (CGImageRef)createScreenshotImage
{
NSWindow *window = [[self view] window];
NSRect rect = [window frame];
rect.origin.y = NSHeight([[window screen] frame]) - NSMaxY([window frame]);
CGImageRef screenshot = CGWindowListCreateImage(
rect,
kCGWindowListOptionIncludingWindow,
//kCGWindowListOptionOnScreenBelowWindow,
0,//(CGWindowID)[window windowNumber],
kCGWindowImageBoundsIgnoreFraming);//kCGWindowImageDefault
return screenshot;
}
Run Code Online (Sandbox Code Playgroud)
唯一可靠的方法是CGDisplayStreamCreate冒险,因为Apple每年都会更改隐私设置。
- (BOOL)canRecordScreen
{
if (@available(macOS 10.15, *)) {
CGDisplayStreamRef stream = CGDisplayStreamCreate(CGMainDisplayID(), 1, 1, kCVPixelFormatType_32BGRA, nil, ^(CGDisplayStreamFrameStatus status, uint64_t displayTime, IOSurfaceRef frameSurface, CGDisplayStreamUpdateRef updateRef) {
;
});
BOOL canRecord = stream != NULL;
if (stream) …Run Code Online (Sandbox Code Playgroud) 下面的链接最近在邮件应用程序中打开时没有换行。
<a href="mailto:info@example.com?subject=Question&body=%0A%0A%0A----------%0AVersion: 2.0%0ABuild: 12345" id="address">support by email</a>
Run Code Online (Sandbox Code Playgroud)
相反,它在邮件应用程序中显示如下:
<BR><BR><BR>----------<BR>Version: 2.0<BR>Build: 12345
Run Code Online (Sandbox Code Playgroud)
但应该看起来像:
它适用于 iOS 13,但现在不再适用。我在另一个应用程序和类似的%0A. 使用的时候也会出现%0D%0A
空格被%20javascript编码。
有没有其他人看到过这个或有尝试的想法?
编辑:提交错误报告 FB9146675。请考虑这样做。只有当重点放在一个主题上时,它才会被看到。
我开始在 iOS13 上收到警告(如下)。我注意到这个警告弹出是因为UITableView的窗口为空(选择了另一个选项卡,在表选择上推送了详细视图控制器......)。我正在尝试UITableView从NSFetchedResultController委托更新。在 iO13 上执行此操作以保持表更新的正确方法是什么?
下面的代码在以前的版本上运行良好。
PS:任何类型的beginUpdates, reloadRowsAtIndexPaths:withRowAnimation:, insertSections:withRowAnimation:, endUpdates都会导致此警告。
PS:我尝试重新加载表,但如果我向后导航,我会丢失取消选择行的动画(清除行选择)。
2019-09-27 09:40:42.849128+0200 xxx[63595:9762090] [TableView] 仅警告一次:UITableView 被告知在不在视图层次结构(表视图或其其中之一)中布局其可见单元格和其他内容superviews 尚未添加到窗口中)。这可能会通过强制 table view 中的视图在没有准确信息(例如 table view bounds、trait collection、layout margins、safe area insets 等)的情况下加载和执行布局而导致错误,并且还会由于额外的布局传递而导致不必要的性能开销. 在 UITableViewAlertForLayoutOutsideViewHierarchy 处创建一个符号断点,以便在调试器中捕获它并查看导致这种情况发生的原因,因此如果可能,您可以完全避免此操作,或者将其推迟到表视图已添加到窗口中。表视图:层 = ; 内容偏移:{0,-64}; 内容大小:{375, 3432};调整内容插入:{64, 0, 0, 0}; 数据来源:>
// ------------ ------------ ------------ ------------ ------------ ------------
#pragma mark - FetchedResultsController delegate
- (void) controllerWillChangeContent:(NSFetchedResultsController *)controller {
// if (self.tableView.window) {
[self.tableView beginUpdates];
// }
}
- (void) …Run Code Online (Sandbox Code Playgroud) 这个问题似乎很简单,但我已经尝试了我能想到的一切,并用Google搜索了几个小时.
我有一个自动完成的NSSearchField,基本上复制了Apple的SearchField示例代码.我在IB中关闭了"发送整个搜索字符串",因为我不想在用户完成文本输入之前进行搜索,并且不想进行多次搜索(它们很昂贵).
当用户在字段中键入时,当他们按Enter键,指定他们接受当前的自动完成时,我希望触发NSSearchField的操作.相反,它似乎只是填写自动完成,然后用户必须再次按下输入才能触发操作.基本上,考虑开始在Safari中输入URL,它会自动填充,然后按Enter键开始加载页面(触发操作).他们不需要再次按回车键开始加载页面.
我尝试过的事情没有成功:
有任何想法吗?谢谢!
我有很多iOS经验,但Cocoa让我有些困惑.我阅读了几篇关于Cocoa的Apple文档,但仍然有一些我在任何地方都找不到的细节.看来文档是在基于NSDocument的Xcode模板更新为使用NSViewController之前编写的,所以我不清楚我应该如何组织我的应用程序.该模板使用NSWindow NSViewController创建一个故事板.
我的理解是我应该将NSWindowController或NSWindow子类化为对我的模型对象的引用,并在makeWindowControllers()中设置它.但是,如果我想使用NSViewController而不是只是将所有内容放在窗口中,我还需要以某种方式访问我的模型.我注意到在我的视图控制器中有一个叫做RepresentObject的东西,它似乎意味着要保存一些模型对象(然后被强制转换),但它总是为零.这是如何设置的?
我发现很难正确地提出这个问题,但我想我的问题是:如何在基于文档的应用程序中正确使用NSViewController?
PS:我知道NSWindowController通常用于管理多个窗口,这些窗口作用于一个文档,所以假设我只需要一个窗口,那么我就不需要NSWindowController.但是,要求可能会改变,从长远来看使用NSWindowController可能会更好,对吧?
cocoa nsdocument nsviewcontroller nswindowcontroller xcode-storyboard
我正在尝试实现自己的自动补全系统(结果是从sqlite数据库中提取的)
我已经设置了NSTextField和适当的委托。每当NSTextField中的文本更改时,它都会调用- (void)controlTextDidChange:(NSNotification *)aNotification方法
它工作正常,在这种方法中,我以编程方式构建菜单,最后使用该代码调用/显示了它:
NSRect frame = [address frame];
NSPoint menuOrigin = [[address superview] convertPoint:NSMakePoint(frame.origin.x, frame.origin.y+frame.size.height-25)
toView:nil];
NSEvent *event = [NSEvent mouseEventWithType:NSLeftMouseDown
location:menuOrigin
modifierFlags:NSLeftMouseDownMask // 0x100
timestamp:0
windowNumber:[[address window] windowNumber]
context:[[address window] graphicsContext]
eventNumber:0
clickCount:1
pressure:1];
[NSMenu popUpContextMenu:menu withEvent:event forView:address];
Run Code Online (Sandbox Code Playgroud)
哪里address是我NSTextField和menu我的NSMenu。问题在于菜单是焦点所在,因此您只能在文本字段中键入1个字母,然后再也不能键入文本,因为菜单现在是第一响应者。
我的问题是如何显示菜单并保持文本字段为第一响应者,以便您可以在字段中每次更改文本时重新加载菜单时键入文本。
实际上,它应该像在Safari或chrome地址栏中。
我为 Mac 制作了一个 iPhone 远程鼠标控制器应用程序:iPhone 应用程序将坐标值发送到 Mac,然后 Mac 处理鼠标位置值。
为了获取 Mac 上的当前鼠标位置,接收者调用 [NSEvent mouseLocation]。
x 的值始终正确,但 y 的值错误。
我使用了“while”循环来处理这个事件。
while (1) {
mouseLoc = [NSEvent mouseLocation];
while ((msgLength = recv(clientSocket, buffer, sizeof(buffer), 0)) != 0) {
CGPoint temp;
temp.x = mouseLoc.x;
temp.y = mouseLoc.y; // wrong value
........
Run Code Online (Sandbox Code Playgroud)
每个循环周期的y值不同。例如,第一次循环时y值为400,下一次循环时y值为500;然后 y 在下一个循环中再次变为 400。
鼠标指针不断地上下移动,两个不同的y值之和始终为900。(我认为是因为屏幕分辨率是1440 * 900。)
我不知道为什么会发生这种情况,该怎么办以及如何调试。
cocoa ×8
macos ×5
objective-c ×4
ios ×3
autocomplete ×2
nstextfield ×2
autolayout ×1
badge ×1
calayer ×1
cifilter ×1
email ×1
ios13 ×1
newline ×1
nsalert ×1
nsdocktile ×1
nsdocument ×1
nsevent ×1
nsmenu ×1
safari ×1
swift ×1
uitableview ×1