我想要完成的事情似乎应该相当简单.我在这里放了一个示例项目.
我有一个NSArrayController充满了NSDictionaries数组.
[[self controller] addObject:@{ @"name" : @"itemA", @"part" : @"partA" }];
[[self controller] addObject:@{ @"name" : @"itemB", @"part" : @"partB" }];
[[self controller] addObject:@{ @"name" : @"itemC", @"part" : @"partC" }];
Run Code Online (Sandbox Code Playgroud)
我正在使用'name'键来填充NSPopupButton以及此数组中的项目.使用以下绑定可以轻松完成此操作
然后,我想根据NSPopupButton的当前选择,使用'part'键中的文本填充NSTextField.我已经设置了以下绑定:
仅使用这些绑定,文本字段就会显示"partC".
但是,如果我更改NSPopupMenu的值,文本字段显示的内容不会更改.
我认为这只是在NSPopupButton上设置'Selected Object'绑定的问题
但那不起作用.我最终得到了菜单中的代理对象,原因有些奇怪(提供原因可能是奖金).
那么,我需要做些什么来使这项工作?
我正在寻找一些代码来进行Objective-C @encode()
指令支持的任意C类型的通用等式比较.我基本上在寻找一个像以下的功能:
BOOL CTypesEqual(void* a, const char* aEnc, void* b, const char* bEnc)
Run Code Online (Sandbox Code Playgroud)
您可能会这样称呼:
struct { ... } foo = { yadda, yadda, yadda };
struct { ... } bar = { yadda, yadda, yadda };
BOOL isEqual = CTypesEqual(&foo, @encode(typeof(foo)), &bar, @encode(typeof(bar)));
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止发现的:
启示录#1
你不能这样做:
BOOL CTypesEqual(void* a, const char* aEnc, void* b, const char * bEnc)
{
if (0 != strcmp(aEnc, bEnc)) // different types
return NO;
NSUInteger size = 0, align = 0;
NSGetSizeAndAlignment(aEnc, &size, &align); …
Run Code Online (Sandbox Code Playgroud) 我正在尝试从Cocoa应用程序运行Python脚本.它在主线程上运行得很好,但是我希望它在后台运行,并发GCD队列.
我正在使用以下方法来设置运行Python脚本的管理器类:
- (BOOL)setupPythonEnvironment {
if (Py_IsInitialized()) return YES;
Py_SetProgramName("/usr/bin/python");
Py_Initialize();
NSString *scriptPath = [[NSBundle mainBundle] pathForResource:@"MyScript" ofType:@"py"];
FILE *mainFile = fopen([scriptPath UTF8String], "r");
return (PyRun_SimpleFile(mainFile, (char *)[[scriptPath lastPathComponent] UTF8String]) == 0);
}
Run Code Online (Sandbox Code Playgroud)
之后,使用manager类的共享单例实例从以下实例方法(重复)调用脚本:
- (id)runScriptWithArguments:(NSArray *)arguments {
return [NSClassFromString(@"MyScriptExecutor") runWithArguments:arguments];
}
Run Code Online (Sandbox Code Playgroud)
上面的Objective-C代码挂钩到以下Python代码:
from Foundation import *
def run_with_arguments(arguments):
# ...a long-running script
class MyScriptExecutor(NSObject):
@classmethod
def runWithArguments_(self, arguments):
return run_with_arguments(arguments)
Run Code Online (Sandbox Code Playgroud)
当我总是从主队列运行上述Objective-C方法时,这可以工作,但是当从任何其他队列运行时,脚本返回null.有人可以解释一下,如果我想要做的事情不被支持,是否有一个好的方法呢?
经常调用Python脚本并运行很长时间,因此在主线程上执行此操作会太慢,而是从串行队列中运行它.另外,我想尽可能地在Objective-C中包含并发代码.
谢谢,
如果你有一个不透明的指针typedef,有没有办法动态引用指向的类型,比如说,在模板中使用?例如,假设你有这样的事情:
struct Foo; // Forward declared struct
typedef Foo* FooPtr; // Opaque pointer
Run Code Online (Sandbox Code Playgroud)
因为智能指针类型是指针类型的模板,为了定义std::shared_ptr
它,你似乎必须说:
std::shared_ptr<struct Foo> theSharedPtr;
Run Code Online (Sandbox Code Playgroud)
有没有办法定义这样的指针而不"手动"展开不透明指针typedef?我觉得我必须在这里遗漏一些明显的东西,但你可能会想到这样的东西(注意:这些不起作用):
std::shared_ptr<*FooPtr> theSharedPointer;
// or
std::shared_ptr<pointedto(FooPtr)> theSharedPointer;
Run Code Online (Sandbox Code Playgroud)
我觉得这应该是可能的.我错过了什么吗?我觉得这是一个即将来临的前额...
编辑:在一些更多的Noodling,似乎,在通常情况下,shared_ptr<T>
想要采取sizeof(T)
.你可以通过为构造函数提供一个删除器来解决这个问题.我怀疑这使得这有点像一个边缘情况,但它仍然似乎与C++中的所有类型争论,我应该能够"解包"一个指针类型,而不是手动这样做.
我有一个python包,输出相当多的帮助文本: help(package)
我想将此帮助文本以其显示的格式导出到文件中 help(package)
我怎么能这样做?
我想私有brew tap
的自制软件没有托管在GitHub上.我曾尝试简单地克隆水龙头的回购,/usr/local/Library/Taps
但似乎没有效果.有人想出来了吗?
我正在学习Cocoa,虽然我对Objective-C及其周围的概念感到满意,但我有时很难将理论(如模型/视图/控制器)应用到实践中.Apple的文档经常给我'A Ha!' 但是,如果有一个精心编写的Cocoa App作为参考,那将会很酷.
那么,你知道一个包含公共源代码的Cocoa应用程序吗?
我正在努力的应用程序最近被Apple拒绝包含可自动更新的订阅.他们建议我们切换到我们内容的非续订订阅.
我无法完全理解的一件事是如何将购买的订阅恢复到共享设备.Apple建议我们不要使用用户登录 - 我们希望自己避免使用.我确实遇到过一个解决方案,在这两个设备之间使用了唯一的代码 - 通过服务器验证购买的订阅.但我相信这很容易被盗版,因为理论上朋友或公司内部的员工可以互相分享这些独特的代码并避免支付订阅费用.
我真的无法在Google上找到这方面的内容,并且很想知道是否有人能够成功实施不续订的订阅?
在对UI响应的永无止境的追求中,我想更深入地了解主线程执行阻塞操作的情况.
我正在寻找某种"调试模式"或额外的代码,或钩子,或其他任何东西,我可以设置一个断点/日志/会被击中的东西,并允许我检查如果我的主线程"自愿"将会发生什么除了在runloop结束时空闲之外的I/O块(或者其他任何原因).
在过去,我使用runloop观察器查看了runloop循环挂钟的持续时间,这对于查看问题非常有价值,但是当你可以检查时,对于它正在做的事情了解它已经太晚了,因为你的代码已经在runloop的那个循环中运行了.
我意识到UIKit/AppKit执行的操作只是主线程,会导致I/O并导致主线程阻塞,所以在某种程度上,它是没有希望的(例如,访问粘贴板似乎是一个可能阻塞的,仅主线程的操作)但是有些东西总比没有好.
有人有什么好主意吗?看起来像是有用的东西.在理想情况下,当你的应用程序代码在runloop上处于活动状态时,你永远不会想要阻止主线程,这样的事情对于尽可能接近目标非常有帮助.
我试图将一个react-native-svg
元素放置在View
这样的一个元素中,使其以一定的固定纵横比进行渲染,然后在包含视图的范围内将其缩放为尽可能大。
将Svg
(从元素react-native-svg
)似乎只接受绝对width
和height
属性(我使用百分比尝试过,但没有渲染和调试确认百分比值是NSNull
当他们到了本机视的时间)。我不确定如何达到预期的效果。到目前为止,这是我尝试过的方法:
// I have a component defined like this:
export default class MySvgCircle extends React.Component {
render() {
return (
<View style={[this.props.style, {alignItems: 'center', justifyContent: 'center'}]} ref="containingView">
<View style={{flex: 1, justifyContent: 'center', alignItems: 'center', aspectRatio: 1.0}}>
<Svg.Svg width="100" height="100">
<Svg.Circle cx="50" cy="50" r="40" stroke="blue" strokeWidth="1.0" fill="transparent" />
<Svg.Circle cx="50" cy="50" r="37" stroke="red" strokeWidth="6.0" fill="transparent" />
</Svg.Svg>
</View>
</View>
);
}
}
// And then consumed …
Run Code Online (Sandbox Code Playgroud) objective-c ×3
cocoa ×2
ios ×2
macos ×2
python ×2
c++ ×1
debugging ×1
homebrew ×1
in-app ×1
io ×1
open-source ×1
pydoc ×1
react-native ×1
reference ×1
storekit ×1