我想从一些随机的Unicode字符串(mich可能只包含任何东西)创建一个健全/安全的文件名(即有些可读,没有"奇怪"字符等).
(对我来说无关紧要,函数是Cocoa,ObjC,Python等)
当然,可能会有无数的字符可能很奇怪.因此,拥有黑名单并在一段时间内向该列表添加越来越多的内容并不是真正的解决方案.
我可以有一个白名单.但是,我真的不知道如何定义它.[a-zA-Z0-9 .]是一个开始,但我也想接受可以正常方式显示的unicode字符.
如何使用我自己的数据源获取NSOutlineView的选定项目.我看到我可以获得selectedRow但它返回相对于轮廓状态的行ID.唯一的方法是跟踪项目的扩展折叠状态,但这看起来很荒谬.
我希望有类似的东西:
array = [outlineViewOutlet selectedItems];
Run Code Online (Sandbox Code Playgroud)
我看了其他类似的问题,他们似乎没有回答这个问题.
谁知道如何在运行iOS 5.0.1的iPhone 4上修复PyObjC?
在我的带有iOS 4.2.1的iPhone 4上,一切都运行良好.
在带有iOS 5.0.1的iPhone 4s(以及安装的所有(相同)软件包)上,PyObjC的东西不起作用.
我得到的错误是:
File "/private/var/stash/Applications.pwn/MyPyObjC.app/MyPyObjC.py", line 9, in <module>
import objc
File "/usr/lib/python2.5/objc/__init__.py", line 17, in <module>
_update()
File "/usr/lib/python2.5/objc/__init__.py", line 14, in _update
import _objc
ImportError: dlopen(/usr/lib/python2.5/lib-dynload/_objc.dylib, 2): Symbol not found: _OBJC_CLASS_$_Object
Referenced from: /usr/lib/python2.5/lib-dynload/_objc.dylib
Expected in: /usr/lib/libobjc.A.dylib
Run Code Online (Sandbox Code Playgroud)
(文件__init__.py和_objc.dylib存在于两个设备中,文件libobjc.A.dylib在两个设备中都缺失)
同样,两款iPhone都安装了相同的软件包(但不同的iOS).
(据我所知,Saurik的HelloPython.app有同样的问题).
我猜他们在iOS 5中改变了一些东西而且PyObjC文件没有反映出这种变化(还)...
我希望他们能解决它...(我有4-5个基于PyObjC的应用程序不再工作):-(
在那之前,任何快速修复的想法?
我正在编写一个简单的Mac应用程序,旨在在后台运行并在用户单击鼠标按钮时执行某些操作.该应用程序是使用PyObjC用Python编写的.我addGlobalMonitorForEventsMatchingMask用来观看NSLeftMouseDown比赛:
NSEvent.addGlobalMonitorForEventsMatchingMask_handler_(NSLeftMouseDownMask, handler)
Run Code Online (Sandbox Code Playgroud)
在终端中运行时,此代码非常有效.但是,当我将其捆绑为独立应用程序(使用py2app)然后启动它时,应用程序最初不会收到任何事件.(或者至少,如果确实如此,它不会在我的处理程序方法中运行代码.)只有当我点击Dock中的应用程序时它才开始接收事件,之后,它继续接收事件,甚至在它之后返回后台.但是直到激活一次它才会收到任何东西.
我的问题是:如何让我的应用程序在启动后立即开始接收事件,而无需先通过单击Dock图标来激活它?这是一些已知的怪癖NSEvents,或者在PyObjC中我的运行循环可能有问题吗?
非常感谢任何帮助或指导!
编辑:经过进一步测试,事实上,我的应用程序似乎在发布后大约十秒钟内自动开始接收通知,无论我是否激活它.这有点烦人,但很好.
但是,如果我使用其中任何一个LSUIElement = true或LSBackgroundOnly = true我的Info.plist(我最终想要做的,因为这个应用程序应该只在后台运行并且永远不会出现在Dock中)运行应用程序,我从未收到通知.所以我仍然被困住了.
我试图按照"使用Xcode 3.2进行PyObjC开发"的接受答案的说明.我会在这里重新发布它们,因为我没有足够的代表对实际问题发表评论:
以下是我为使PyObjC在Snow Leopard中工作所做的工作:
使用Finder,我作为访客Go > Connect to Server...访问了http://svn.red-bean.com/pyobjc/trunk/pyobjc/pyobjc-xcode/.
然后Xcode,我在我的本地系统上创建了一个文件夹~Library/Application Support/Developer/Shared/Xcode/.(你可能已经有了这个文件夹,但我还没有为自己定制任何东西).
我将File Templates文件夹从红豆服务器复制到我的新Xcode文件夹中.
将Project Templates文件夹复制到其他位置,例如桌面.
使用终端,导航到我桌面上的临时项目模板文件夹并运行此命令以"构建"模板:
$ cd~/Desktop/Project\Templates /
$ ./project-tool.py -k -v --template~/Desktop/Project\Templates/Cocoa-Python\Application/CocoaApp.xcodeproj/TemplateInfo.plist Cocoa-Python\Application~/Library/Application\Support/Developer/Shared/Xcode/Project\Templates/Cocoa-Python\Application
当我尝试运行以开头的行时./project-tool.py,我在终端中收到以下错误:
Traceback (most recent call last):
File "./project-tool.py", line 22, in <module>
from Foundation import NSDictionary
ImportError: No module named Foundation
Run Code Online (Sandbox Code Playgroud)
我正在运行Snow Leopard并已安装Xcode 3.2.1,并已阅读此模块应已安装并正常工作.我已经读过你可以通过>>> import objc在Python命令行中运行来测试PyObjC模块是否正常工作.当我运行这个时,我得到:
>>> import objc
Traceback (most recent call last):
File "<stdin>", line 1, in …Run Code Online (Sandbox Code Playgroud) 我使用Python 2 Tkinter和PyObjC,然后我使用py2app.
程序工作正常,但是每当我打开程序时窗口都会以隐藏的方式启动,所以直到我点击停靠栏上的图标才能显示它.
有没有办法控制这个,让窗口在应用程序启动时打开的其他窗口的顶部?
只是为了澄清,它不必在应用程序运行的整个过程中处于顶部.我只是需要它在其他窗口启动时.
我正在尝试使用PyObjC(3.0.4)更改Mac(10.10.4)上的DNS服务器.
一切似乎都有效:我收到一个身份验证对话框,提示我的程序正在尝试更改网络设置,并返回提交/应用命令True,这表明它们已成功.
但是,系统设置实际上并未更改:它们保持不变.知道为什么他们不"坚持"?
代码(独立,如果你安装了最新版本的PyObjC,应该可以工作):
#!/usr/bin/env python
import objc
from SystemConfiguration import *
# Open dynamic store and get primary interface
store = SCDynamicStoreCreate(None, 'MyApp', None, None)
primaryif = SCDynamicStoreCopyValue(store, 'State:/Network/Global/IPv4')['PrimaryInterface']
if primaryif:
print "Using %s as primary interface" % primaryif
else:
raise "Can't find primary interface"
# Load SecurityInterface framework to provide SFAuthorization
objc.initFrameworkWrapper(
frameworkName = "SecurityInterface",
frameworkIdentifier = "com.apple.securityinterface",
frameworkPath = objc.pathForFramework("/System/Library/Frameworks/SecurityInterface.framework"),
globals = globals()
)
# Access system preferences
preferences = SCPreferencesCreateWithAuthorization(None, 'MyApp', None, …Run Code Online (Sandbox Code Playgroud) 例如,http://developer.apple.com/cocoa/pyobjc.html仍然适用于OS X 10.4 Tiger,而不是10.5 Leopard ..而且这是Apple的官方文档..
官方PyObjC页面同样糟糕,http: //pyobjc.sourceforge.net/
这太糟糕了,令人费解......我正在考虑学习Ruby主要是因为RubyCocoa的东西有更好的文档记录,并且有很多不错的教程(例如http://www.rubycocoa.com/),并且因为鞋子GUI工具包..
即使是这个严重自动翻译的日语教程也比我能找到的其他文档更有用.
我想要做的就是使用Cocoa GUI创建相当简单的Python应用程序..
任何人都可以了解可怕的文档,或者指出一些教程不仅仅会给你巨大的代码块并假设你知道什么NSThread.detachNewThreadSelector_toTarget_withObject_("queryController", self, None)是... ?
Xcode 3.2删除了脚本语言(Ruby,Python等)的默认模板.如何在Xcode 3.2中找到这些模板?我是否需要向Xcode添加任何其他内容以支持使用和"构建"PyObjC程序?
另外,是否有任何文档和/或资源可以帮助我进入PyObjC(和Cocoa),考虑到我已经是Python人了?
Xcode 3具有用于在Python中构建Cocoa子类的模板.我最近升级到了Xcode 4,但是我不知道如何在Xcode 4中使用除C系列(C,C++,Obj-C)之外的其他语言.
有人知道吗?