我是一个Objective-C菜鸟,已经搜索了高低不能找到答案:
在我的RubyMotion项目中,我有一个名为StatusGuage的UIView子类,它包含一个名为drawLinearGradient的方法,如下所示:
def drawLinearGradient(context, rect, startColor, endColor)
colorspace = CGColorSpaceCreateDeviceRGB()
locations = [0.0, 1.0]
# colors = NSArray.arrayWithObjects(startColor, endColor, nil)
# ptrColors = Pointer.new(:object, colors)
colors = [startColor, endColor, nil]
# CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (CFArrayRef) colors, locations);
CGGradientCreateWithColors(colorspace, colors, locations)
end
Run Code Online (Sandbox Code Playgroud)
我想知道如何调用CGGradientCreateWithColors.它显然需要一个(CFArrayRef)指针,但我无法弄清楚如何传入它.我尝试过的迭代之一被注释掉了.
这是错误消息:
2012-05-11 16:57:36.331 HughesNetMeter[34906:17903]
*** Terminating app due to uncaught exception 'TypeError',
reason: 'status_guage.rb:43:in `drawLinearGradient:': expected
instance of Pointer, got `[0.0, 1.0]' (Array) (TypeError)
from status_guage.rb:13:in `drawRect:'
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助.
我正在尝试初始化ruby中的单例.这是一些代码:
class MyClass
attr_accessor :var_i_want_to_init
# singleton
@@instance = MyClass.new
def self.instance
@@instance
end
def initialize # tried 1. initialize, 2. new, 3. self.initialize, 4. self.new
puts "I'm being initialized!"
@var_i_want_to_init = 2
end
end
Run Code Online (Sandbox Code Playgroud)
问题是从不调用initialize,因此单例永远不会初始化.我尝试命名init方法initialize,self.initialize,new和self.new.没有任何效果."我正在初始化"从未打印过,变量从未在我实例化时初始化
my_var = MyClass.instance
Run Code Online (Sandbox Code Playgroud)
如何设置单例以使其初始化?帮助赞赏,
Pachun
我有一些常用的方法用于几个不同的规格,我想将它们提取到某个地方,如可以从所有规格访问的规范助手.有人知道怎么做吗?
我有一封电子邮件,想从gravatar.com中提取相应的图片
使用ruby,很容易:
require 'Digest/md5'
Digest::MD5.hexdigest("my string")
Run Code Online (Sandbox Code Playgroud)
由于requireRubyMotion中没有方法,如何从电子邮件生成哈希?
在我的应用程序中,我们有一个带有MKMapView的屏幕.
此地图显示了一堆位置的引脚(位置是应用程序中定义的模型).
在模拟器中运行时,这很好用.但是,当在设备上运行时,引脚似乎消失并且几乎每次平移地图时都会重新出现.即使轻微的触摸和移动也可能导致地图显示和隐藏引脚.
地图不是特别繁忙,即使显示一个引脚也会显示并隐藏它.
有谁知道为什么会这样?我在下面粘贴了我的代码......这是一个Rubymotion应用程序,所以代码是在Ruby中.
我在下面添加了与此Ruby代码等效的Objective C.抱歉,如果有一些拼写错误或惯用语错误,那我已经写了一段时间了.
看着记录器,我可以看到mapView:viewForAnnotation每次地图引脚消失/重新出现时都会调用它.
每次mapView:regionDidChangeAnimated我都可以看到注释的对象ID是相同的 - 所以我不认为它们被删除(它们不应该被删除)
# ====================
# = MKMapKitDelegate =
# ====================
# Don't react if the user has moved less than three meters
USER_MOVE_THRESHOLD = 3
# The user location has changed
def mapView(mapView, didUpdateUserLocation: newLocation)
NSLog("mapView:didUpdateUserLocation")
return unless userLocation
coord = newLocation.coordinate
newLocationAsCL = CLLocation.alloc.initWithCoordinate(coord, altitude: 1, horizontalAccuracy:1, verticalAccuracy: -1, timestamp: nil)
meters = newLocationAsCL.distanceFromLocation(@lastUserCLLocation)
# If user has moved less …Run Code Online (Sandbox Code Playgroud) 有没有人知道导致这次崩溃的原因是什么?
它很少发生.
崩溃报告来自设备的HockeyApp.我无法在模拟器上重现它.
任何想法都非常感激.
Exception Type: SIGTRAP
Exception Codes: #0 at 0x197c73c10
Crashed Thread: 0
Thread 0 Crashed:
0 libobjc.A.dylib 0x0000000197c73c10 _objc_trap() + 0
1 libobjc.A.dylib 0x0000000197c73c80 _objc_fatal + 80
2 libobjc.A.dylib 0x0000000197c8e7fc (anonymous namespace)::AutoreleasePoolPage::busted(bool) + 140
3 libobjc.A.dylib 0x0000000197c8d54c (anonymous namespace)::AutoreleasePoolPage::pop(void*) + 88
4 CoreFoundation 0x0000000187418f94 _CFAutoreleasePoolPop + 24
5 UIKit 0x000000018bcd8c28 _wrapRunLoopWithAutoreleasePoolHandler + 72
6 CoreFoundation 0x00000001874ee14c __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 28
7 CoreFoundation 0x00000001874eb0d8 __CFRunLoopDoObservers + 356
8 CoreFoundation 0x00000001874eb4b8 __CFRunLoopRun + 832
9 CoreFoundation 0x00000001874191f4 CFRunLoopRunSpecific + 392 …Run Code Online (Sandbox Code Playgroud) 在开发菜单栏应用程序时,我很难找到使应用程序看起来很好的首选方法.我原本以为Apple控件基本上会在很大程度上处理这个问题,但看起来并非如此.
确保菜单栏应用程序在明暗模式下看起来都很好的首选方法是什么?我是否缺少一些可以更轻松地实现此功能的控制功能,还是需要手动检测模式并适当地修改控件?
Xcode最强大的功能之一就是它的Intellisense完成功能,它会在您输入Foundation/Cocoa/UIKit API的名称时显示潜在候选项列表.我对MacRuby,PyObjC或更新的RubyMotion非常感兴趣,但是如果没有代码完成,这些工具似乎比它们的价值更麻烦.
上述三种技术中的任何一种,对于任何文本编辑器(但最好是Vim或Xcode),是否有任何代码完成功能(不一定是Intellisense )?IDE解决方案的奖励点,允许在单个命令中构建和运行应用程序(如Xcode的"运行"按钮).
据我所知,Xcode 4放弃了对MacRuby/PyObjC的支持,因此Intellisense不再可用.为了完成代码,我应该在Xcode 4旁边安装Xcode 3吗?其他人如何做到这一点(当然你们使用某种形式的代码完成 - 我不相信任何人都能记住Foundation/Cocoa/UIKit中的所有类)?
我是 OSX 开发的初学者,所以我希望我的问题能在这里找到解决方案。
我的NSTokenField应用程序中有一个,我实现了该tokenField:completionsForSubstring:indexOfToken:indexOfSelectedItem:方法。
一切正常,但目前的结果是这样的:

我想要的是让它看起来像这样:(类似于邮件应用程序中的完成)

这意味着我希望完成列表采用所有 NSTokenField 宽度。使用Accessibility Inspector,我可以看到与第一个 sreenshot 对应的层次结构是:
AXScrollArea -> AXList -> AXTextField
而对应于第二个屏幕截图的是:
AXScrollArea -> AXTable -> AXRow:AXTableRow -> AXTextField
所以我想我必须使用 anNSTableView来显示完成列表,但我不知道如何实现。有谁知道这怎么可能?
在此先感谢您的帮助。
编辑
至少有 2 人建议我实现该tokenField:menuForRepresentedObject:方法并使用适当的NSMenu属性定义菜单宽度。但是这个方法用于为给定的令牌定义一个菜单,我已经实现了它:
def tokenField(tokenField, menuForRepresentedObject:representedObject)
theMenu = NSMenu.alloc.initWithTitle("Email address context menu")
item_0 = theMenu.insertItemWithTitle('add_to_address_book'.localized, action:'add_to_address_book', keyEquivalent:"", atIndex:0)
item_0.setTarget(self)
item_1 = theMenu.insertItemWithTitle('new_message'.localized, action:'new_message', keyEquivalent:"", atIndex:1)
item_1.setTarget(self)
theMenu
end
Run Code Online (Sandbox Code Playgroud)
这给了我这样的东西:

很棒的东西,但不是我在这里问的。
有没有人在使用joybox更新rubymotion时遇到问题?我刚刚更新了rubymotion今天早上我的应用程序立即崩溃...这是我的错误.
Inheriting from Motion::Project::Command' has been deprecated, inherit fromMotion::Command' instead.
Run Code Online (Sandbox Code Playgroud)
不知道这是不是为什么它会破裂......但我需要弄明白这一点.我试过回滚版本,找不到适用的版本.非常感激任何的帮助.