我有以下代码,其最后一行导致每次执行时出现NotSupportedException,我还没有找到解决方法.这个假设的类似代码找到一个具有特定标题的"书",目的是将其更新为新标题.它确实找到了正确的节点,但无法更新它.
XPathDocument xpathDoc = new XPathDocument( fileName );
XPathNavigator nav = xpathDoc.CreateNavigator();
XPathNavigator node = nav.SelectSingleNode( @"//Book[Title='OldTitle']/Title" );
node.SetValue( "NewTitle" );
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
我的应用程序有一个NSOutlineView和一个NSTableView,我两个都有同样的问题.如果选择了一行,则按Tab键会将第一列置于编辑模式,而不是使下一个键视图成为第一响应者.要进入下一个关键视图,您需要标记所有列.
此外,切换到任一视图会导致最后一列进入编辑模式,需要更多的shift-tabs才能进入其先前的关键视图.
如果它很重要,我使用自动计算的关键视图循环,而不是我自己的,我的NSWindow设置为autorecalculatesKeyViewLoop = YES.一旦用户选择编辑列,我希望在列之间进行选项卡,但我不认为Tab键触发编辑模式的标准行为.
更新
感谢下面的有用回复,我解决了这个问题.基本上,我-keyDown在我的自定义表视图类中重写,它处理表格视图中的Tab键和shift-tabbing.然而,将换档标签解决到表格视图中更为困难.如果它接受来自另一个视图的控件,我YES在自定义表视图中设置一个布尔属性-acceptsFirstResponder.
代表-tableView:shouldEditTableColumn:row在当前事件是shift-tab keyDown事件时检查该代理.-tableView:shouldEditTableColumn:row被调用并且它不是shift-tab事件,它将表视图的属性设置回来,NO因此它仍然可以像往常一样进行编辑.
我已经粘贴了下面的完整解决方案.
/* CustomTableView.h */
@interface CustomTableView : NSTableView {}
@property (assign) BOOL justFocused;
@end
Run Code Online (Sandbox Code Playgroud)
/* CustomTableView.m */
@implementation CustomTableView
@synthesize justFocused;
- (BOOL)acceptsFirstResponder {
if ([[self window] firstResponder] != self) {
justFocused = YES;
}
return YES;
}
- (void)keyDown:(NSEvent *)theEvent
{
// Handle the Tab …Run Code Online (Sandbox Code Playgroud) 我在我的应用程序中有一个相当普通的源列表(从对象库中拖出),其中包含一个NSTreeController数据源.我将DataCellNSTextField内部设置为可编辑,但我希望能够为某些单元格关闭它.我认为你这样做的方式是使用委托,但没有我试过的委托方法被调用.有什么我想念的吗?我的委托在我的XIB中设置了一个插座,它恰好是所有者的委托,同时实现了和 协议.NSTextFieldNSOutlineViewNSOutlineViewDelegateNSTextFieldDelegate
此外,我也不能使用旧–outlineView:shouldEditTableColumn:item: NSOutlineViewDelegate方法,因为这只适用于基于单元格的大纲视图(我假设是这种情况 - 大纲视图文档似乎没有为Lion更新,尽管类似NSTableView文档有,并且这些方法也没有调用).
我在一个全新的测试项目中重现了这一点,因此它绝对与我的任何自定义类无关.按照以下步骤创建我的示例项目,并重现此问题.
Source List拖到窗口上Object小号到坞(窗口的左侧),指定SourceListDataSource为一个类,并且SourceListDelegate对于其他dataSource和delegate插座连接到这两个对象NSTextField在大纲视图的列中选择DataCell视图的静态文本Value绑定,保持默认设置delegate插座连接到Source List Delegate对象Behavior属性设置为可编辑预期:该领域不可编辑,并且有一个"好吧,我应该吗?" 日志中的消息
实际:该字段是可编辑的,不记录任何消息
这是框架中的错误,还是我应该以不同的方式实现这一目标?
#import <Cocoa/Cocoa.h>
@interface SourceListDataSource : NSObject <NSOutlineViewDataSource>
@property (retain) NSArray …Run Code Online (Sandbox Code Playgroud) 我正在创建一个聚焦在我的应用程序中移动内容的聚光灯,如下所示:

在示例应用程序(如上所示)中,背景图层是蓝色的,我在其上面有一个图层使所有图层变暗,除了正常显示它的圆圈.我有这个工作(你可以在下面的代码中看到).在我的真实应用中,其他CALayers中有实际内容,而不仅仅是蓝色.
这是我的问题:它没有动画.我正在使用CGContext绘图来创建圆圈(这是一个黑色图层中的空白点).当您单击我的示例应用程序中的按钮时,我会在不同位置绘制不同大小的圆圈.
我希望能够顺利地翻译和扩展,而不是像目前那样跳跃.它可能需要一种不同的方法来创建聚光灯效果,或者可能有一种我不知道的方式隐式地为-drawLayer:inContext:调用设置动画.
创建示例应用程序很容易:
SpotlightView.h,因为我将其内容包含在SpotlightView.m中-moveSpotlight:操作更新(mask属性)
我喜欢DavidRönnqvist在评论中建议使用mask黑暗层的属性来切出一个洞,然后我可以独立移动.问题在于,由于某种原因,该mask属性与我期望掩码工作的方式相反.当我指定一个圆形蒙版时,所有显示的都是圆形.我期望掩码以相反的方式工作,用0alpha 屏蔽区域.
掩盖感觉是正确的方法,但如果我必须填写整个图层并切出一个洞,那么我也可以按照我最初发布的方式进行操作.有谁知道如何反转-[CALayer mask]属性,以便绘制的区域从图层的图像中被切除?
/更新
这是以下代码SpotlightView:
//
// SpotlightView.m
//
#import <Quartz/Quartz.h>
@interface SpotlightView : NSView
- (IBAction)moveSpotlight:(id)sender;
@end
@interface SpotlightView ()
@property (strong) CALayer *spotlightLayer;
@property (assign) CGRect highlightRect;
@end
@implementation SpotlightView
@synthesize spotlightLayer;
@synthesize highlightRect;
- (id)initWithFrame:(NSRect)frame {
if ((self = [super initWithFrame:frame])) {
self.wantsLayer = …Run Code Online (Sandbox Code Playgroud) 你会如何从Travis推送到CocoaPods?我想为每个标记的提交做一个pod trunk push,但对pod trunk registerTravis 来说这是个好主意吗?Trunk的文档说它注册了一台机器,而不是用户,所以无意中打开了Pod以推动其他使用Travis的人?
有没有人有一个已经这样做的回购的例子?
您可以使用Travis命令行工具推送的私有API密钥,使用RubyGems执行此操作,如RubyGems部署中所述.
假设我有一个具有以下播放列表结构的 iOS 音乐库:
A Folder
|
---> A Playlist
|
---> Song A
Run Code Online (Sandbox Code Playgroud)
我运行以下代码:
import MediaPlayer
let playlists = MPMediaQuery.playlists().collections! as! [MPMediaPlaylist]
for playlist in playlists {
let firstItemName = playlist.items.first?.title ?? "none"
print("playlist: \(playlist.name!), first item: \"\(firstItemName)\"")
}
Run Code Online (Sandbox Code Playgroud)
我得到这个控制台输出:
播放列表:播放列表,第一项:“歌曲 A”
播放列表:A 文件夹,第一项:“歌曲 A”
我已经查看了所有 MediaPlayer 框架文档,但找不到任何方法来通过 API 发现播放列表和文件夹之间的父/子关系(或者甚至告诉集合包含其他集合)。我只想在用户浏览 A 文件夹后才显示 A 播放列表,而不是将它们显示为兄弟姐妹(或者甚至可能完全过滤掉 A 文件夹。
此外,文件夹和播放列表在运行时都具有相同的类:MPConcreteMediaPlaylist.
我的应用程序中有一个 Objective-C 类 ( MyClass)。在 Swift 文件中,我添加了一个扩展名,使其符合NSFilePromiseProviderDelegate协议/接口:
extension MyClass: NSFilePromiseProviderDelegate {
public func filePromiseProvider(_ filePromiseProvider: NSFilePromiseProvider, fileNameForType fileType: String) -> String {
...
}
public func filePromiseProvider(_ filePromiseProvider: NSFilePromiseProvider, writePromiseTo url: URL, completionHandler: @escaping (Error?) -> Void) {
...
}
public func operationQueue(for filePromiseProvider: NSFilePromiseProvider) -> OperationQueue {
...
}
}
Run Code Online (Sandbox Code Playgroud)
我的应用程序编译得很好,但我有一个单元测试包(在 Xcode 中曾经被称为“逻辑测试”包),它也编译了应用程序包之外的所有类。当我添加包含此扩展名的 Swift 文件时,我的单元测试中出现编译器错误:
<path>/NSPasteboard+ACAdditions.swift:205:18: error: redundant conformance of 'MyClass' to protocol 'NSFilePromiseProviderDelegate'
extension MyClass: NSFilePromiseProviderDelegate {
^
AppName.MyClass:1:11: note: 'MyClass' declares conformance to protocol …Run Code Online (Sandbox Code Playgroud) 我想让我的 .Net Core 3.1 应用程序在磁盘上的文件更改时自动重新加载其配置,但我无法使其与选项模式一起使用。我运行我的应用程序,保存对配置文件的更改,但它从未被调用。为什么 IOptionsMonitor 实例不调用 OnChange 处理程序?我缺少什么?
Program.cs IHostBuilder 创建
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(config => configuration = config.Build())
.ConfigureServices((hostContext, services) => {
var separateConfig = new ConfigurationBuilder()
.AddJsonFile("SeparateConfig.json", optional: false, reloadOnChange: true)
.Build();
services
.AddSingleton<MyMainService>()
.Configure<MySeparateConfig>(c => separateConfig.Bind(c));
})
Run Code Online (Sandbox Code Playgroud)
使用 MySeparateConfig 的服务
public class MyMainService
{
public MyMainService(IOptionsMonitor<MySeparateConfig> config)
{
if (config is null) throw new ArgumentNullException(nameof(config));
ConfigChangeHandle = config.OnChange(UpdateConfiguration);
// Perform initial configuration using config.CurrentValue here
}
private IDisposable ConfigChangeHandle { get; set; }
private void UpdateConfiguration(MySeparateConfig config)
{ …Run Code Online (Sandbox Code Playgroud) 我按照Apple的指示在我的项目中设置单元测试.我按照指示使它们依赖,所以测试运行我的主项目的每个构建.这是有效的,当我的测试通过时,应用程序运行; 当他们不这样做时,我会在失败的单元测试中遇到构建错误.
但是,我希望能够在测试失败时逐步执行我的应用程序代码,但无法正确配置Xcode(3.2.5).该项目是一个Mac项目,而不是iOS.
我在这里和这里尝试了指令,但执行从未在我设置的断点处停止,无论是在单元测试代码中还是在我的应用程序代码中.在遵循第一组指令后,我设置的断点变为黄色并带有蓝色轮廓,我也不知道这意味着什么.我需要做什么才能完成测试?
更新
我发现另一个页面试图通过向我的主可执行文件添加参数和环境变量来解决这个问题(这里),但同样,这些并没有导致执行停止在我的断点处.我还注意到我的测试(大量)日志语句也没有显示在我的调试器控制台中.
我还发现黄色断点意味着在运行时无法找到的代码.这些都在我的测试用例类中,所以这似乎肯定解释了为什么那些没有解雇.
我最近刚和CA一起玩.现在我有点卡住了.这是我想要动画的东西:

至于现在我已经得到了圆形动画.我将CALayer子类化为制作动画.我真的不知道从哪里开始.我在哪里添加CATextLayer的子图层?如何同时为两者设置动画,使其看起来像带有线条的文字粘在圆圈末端?
如果您需要一些代码或其他任何内容,请告诉我.
我很乐意在这里得到一些帮助:-)
非常感谢!
macos ×4
cocoa ×3
c# ×2
calayer ×2
ios ×2
objective-c ×2
swift ×2
unit-testing ×2
xcode ×2
.net ×1
.net-core ×1
catextlayer ×1
cocoapods ×1
debugging ×1
drawing ×1
git ×1
iphone ×1
keyboard ×1
mpmediaquery ×1
nstableview ×1
nstextfield ×1
osx-lion ×1
travis-ci ×1
xml ×1
xpath ×1