我更新到Xcode 6.1来修复我使用Interface Builder Cocoa Touch Tool时出现的错误,当我使用故事板时,它会占用99%的CPU,这会冻结Xcode.既然错误得到解决,我可能会遇到更令人沮丧的错误.
当我使用故事板时,我正在处理一个UIViewController,我的UITextView,我的自定义UITextViews(它们是UITextView故事板中的所有意图和目的的子类,它们都是UITextViews),然后我UIImageView突然消失了!
以下是我的视图控制器中的默认主视图现在的样子:
主视图
我正在Xcode 6.0.1中开发一个iOS 8应用程序并在我的iPhone 5上运行它(其上有iOS 8.0.2).在我更新到iOS 8.0.1和Xcode 6.0.1之前,我从来没有得到过我得到的错误.但是,现在,有时当我尝试将我的应用程序从Xcode运行到我的iPhone时,此错误消息从Xcode窗口的顶部弹出:
Could not launch "[app name]". Process launch failed: 4294967295
Run Code Online (Sandbox Code Playgroud)
看来这个错误只发生在我第一次将应用程序从Xcode运行到我的设备上时(即如果我在Xcode中关闭错误消息,但我没有关闭手机上的应用程序 - 所以应用程序仍然在我的手机上 - 当我在Xcode中再次单击运行按钮时,我没有收到此错误.但是,似乎并没有很多一致性,因为有时即使我第一次将应用程序从Xcode启动到我的手机上,错误消息也不会下降(即,没有应用程序已经在我的手机上).
另外,我尝试了几种解决方案,其中没有一种解决方案完全修复了错误:
即使在尝试上述解决方案尝试之后,我似乎也无法弄清楚如何使此错误始终保持不变.同样,我仍然可以在我的手机上正常运行应用程序,但每次运行它都会在Xcode中显示奇怪的错误消息,并且只在我的手机上打开应用程序,但不会将其与Xcode链接(用于控制台输出等) .
任何帮助将非常感激.谢谢!
我正在为我的iPhone 5(其上有iOS 8.0.2)创建一个带有Xcode 6.0.1的iOS 8应用程序.我想这样做,以便当用户点击我时UITextView,所有文本都被选中,这样他就可以轻松地开始输入并删除那里的内容(但我不希望文本被自动删除,因为用户可能想要保留它或附加到它).为此,我有以下代码:
- (void)textViewDidBeginEditing:(UITextView *)textView {
if ([textView hasText]) {
NSLog(@"selectedRange before: %d", textView.selectedRange.length);
[textView selectAll:self];
NSLog(@"selectedRange after: %d", textView.selectedRange.length);
}
}
Run Code Online (Sandbox Code Playgroud)
调用此方法时,控制台输出是我所期望的(即selectedRange长度与textView文本中的字符数相同).但是,没有任何内容显示为选中,UITextView并且它不会被选中(即没有选择菜单弹出).
我在互联网上看到过这样的多个问题,但是所提供的解决方案都没有为我工作(其中一些解决了它作为一个错误而没有提供任何解决方案).将发件人ID更改为self(例如nil)之外的其他内容没有帮助,也没有帮助[textView select:self]按照一个人的建议进行呼叫.我也试过这段代码:
- (void)textViewDidBeginEditing:(UITextView *)textView {
if ([textView hasText]) {
UITextRange *range = [textView textRangeFromPosition:textView.beginningOfDocument toPosition:textView.endOfDocument];
[textView setSelectedTextRange:range];
}
}
Run Code Online (Sandbox Code Playgroud)
但是,它有同样的问题.
有什么建议?
我有快速的类与我的Objective-C代码混合在一起.使用Swift 2.3,一切都很好并按预期工作.
我最近转换为Swift 3,它更新了几个API调用,因为Swift 3发生了所有重命名.这很好; 我明白了.
但是什么不好,Swift 3似乎已经在我的一个Objective-C类中重命名了一个方法.我拥有Objective-C类,并且调用了我想要的方法:readDeliveryInfoItems.但现在,在转换为Swift 3后,我无法.readDeliveryInfoItems()再在Swift类中调用了.它告诉我它已被重命名为.readItems().
这是没有意义的.Objective-C类仍然调用该方法readDeliveryInfoItems,因此这里有一些内容.
我已经尝试将Objective-C readDeliveryInfoItems方法重命名为readDeliveryInfo,构建(Swift失败,因为它表示该readInfo()方法不存在,这很好),然后将方法重命名为readDeliveryInfoItems.但是,当我在此之后构建时,Swift会重新思考调用该方法readInfo().我希望这会欺骗Xcode刷新Swift桥接并将方法重命名为正确的名称readDeliveryInfoItems(),但事实并非如此.
我怎样才能解决这个问题?
更新以添加更多信息
我的Objective-C类的接口有这个函数声明:
- (nullable NSArray<XMPPDeliveryInfoItem *> *)readDeliveryInfoItems;
Run Code Online (Sandbox Code Playgroud)
但是在该类的生成接口(参见下面的MartinR的注释)中,函数声明就是:
open func readItems() -> [XMPPDeliveryInfoItem]?
Run Code Online (Sandbox Code Playgroud)
该类中还有与该readDeliveryInfoItems函数类似的其他函数,例如:
- (nullable NSArray<XMPPDeliveryInfoItem *> *)sentDeliveryInfoItems;
Run Code Online (Sandbox Code Playgroud)
它们在生成的界面中看起来正确:
open func sentDeliveryInfoItems() -> [XMPPDeliveryInfoItem]?
Run Code Online (Sandbox Code Playgroud)
所以我无法弄清楚为什么我只用一个函数来解决这个问题.
我有一个接受 lambda 的函数(并且 lambda 也接受一个参数)。我如何模拟该功能?
在下面的示例中,我试图模拟connection.xmppStanzas:
示例类:
type Matcher<T> = (t: T) => boolean;
const myMatcher: Matcher<Element> = (id: string) => ...;
class SomeClass {
constructor(private readonly idSource: IdSource,
private readonly connection: XmppConnection) {}
doSomething() {
const id = this.idSource.getId();
this.connection.xmppStanzas(myMatcher(id)).pipe(
...do something with the stanza
);
}
}
Run Code Online (Sandbox Code Playgroud)
测试SomeClass:
describe('SomeClass', () => {
let idSource: IdSource;
let connection: XmppConnection;
let instance: SomeClass;
beforeEach(() => {
idSource = mock(idSource);
connection = mock(XmppConnection);
instance = new SomeClass( …Run Code Online (Sandbox Code Playgroud) objective-c ×3
ios ×2
uitextview ×2
ios8 ×1
iphone ×1
mocking ×1
selectall ×1
swift ×1
swift3 ×1
ts-mockito ×1
typescript ×1
uiimageview ×1
xcode ×1
xcode6 ×1