最近,我一直在制作一个简单的iOS 8共享扩展来了解系统的工作原理.正如Apple在其App Extension编程指南中所述:
默认情况下,您的应用及其扩展程序无法直接访问彼此的容器.
这意味着扩展程序和包含应用程序不共享数据.但在同一页面上,Apple带来了一个解决方案:
如果您希望包含应用及其扩展能够共享数据,请使用Xcode或Developer门户为应用及其扩展启用应用组.接下来,在门户中注册应用程序组,并指定要在包含的应用程序中使用的应用程序组.
然后,可以使用NSUserDefaults在包含应用程序和扩展程序之间共享数据.这正是我想做的.但由于某种原因,它不起作用.
在同一页面中,Apple建议使用标准默认值:
var defaults = NSUserDefaults.standardUserDefaults()
Run Code Online (Sandbox Code Playgroud)
在WWDC演示文稿(217)中,他们提出了一个共同的方案:
var defaults = NSUserDefaults(suiteName: kDefaultsPackage)
Run Code Online (Sandbox Code Playgroud)
此外,我为包含应用目标和扩展目标的应用组启用了相同的应用组名称:

但所有这些设置都是无用的.我无法从扩展程序中检索存储在包含应用程序中的数据.就好像两个目标正在使用完全不同的NSUserDefaults存储.
所以,
我正在尝试构建一个扩展项目,Xcode不断抛出主题中的错误.

不用一天,扩展程序的包ID 以app的包ID 为前缀.
产品名称: ro.chitza.TodayPics.$(TARGET_NAME:rfc1034identifier

我已经尝试清理构建文件夹并重建,没有运气.有趣的是,整个项目已经构建了几次,但在一些代码和UI更改后,它开始失败.即使我创建了新项目,在大约5-6个构建之后也会发生同样的事情.
有没有人遇到这个错误?有关解决方案或解决方法的任何提示吗?
有一个像这样的代码:
switch (indexPath.section, indexPath.row) {
case (0, 1...5): println("in range")
default: println("not at all")
}
Run Code Online (Sandbox Code Playgroud)
问题是我可以在第二元组值中使用多个区间吗?
对于非元组切换,它可以很容易地完成
switch indexPath.section {
case 0:
switch indexPath.row {
case 1...5, 8...10, 30...33: println("in range")
default: println("not at all")
}
default: println("wrong section \(indexPath.section)")
}
Run Code Online (Sandbox Code Playgroud)
我应该使用哪个分隔符来分隔元组内部的间隔,或者它不适用于元组开关,我必须在开关内使用开关?谢谢!
因此,我正在尝试使用Mavericks上的Xcode 6.0.1使用现有的配置文件(之前有效)创建临时构建,但在尝试导出此存档后,我不断收到以下错误:

我是否需要重新创建证书和配置文件,还是有更好的解决方案?谢谢!
我找不到曾经存在于Xcode 5中的小盒子,它允许我播放/删除目标.
有谁知道如何在Xcode 6.1中做到这一点?
我在XCode 6 GM 上UITableView为iPhone 6模拟器(iOS 8)找到了一个奇怪的白色空间.我试图设置SeparatorInset故事板和代码,但白色空间直到那里.
以下代码适用于iOS 7,但不适用于iOS 8(iPhone 6模拟器).
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
if ([tableView respondsToSelector:@selector(setSeparatorInset:)]) {
[tableView setSeparatorInset:UIEdgeInsetsZero];
}
}
Run Code Online (Sandbox Code Playgroud)
我附上下面的屏幕截图:

我顺便使用AutoLayout.我希望有人可以告诉我一种方法来消除奇怪的白色空间TableView.
当我尝试使用代码将UILabel的颜色设置为另一个UILabel的颜色时
myLabel.textColor = otherLabel.textColor
Run Code Online (Sandbox Code Playgroud)
它不会改变颜色.但是,当我使用此代码时,
myLabel.textColor = UIColor.redColor()
Run Code Online (Sandbox Code Playgroud)
它正确地改变了颜色.第一线有什么问题?
所以在我创建一个Xcode 6项目之后,即使我没有在其中编写任何代码,如果我尝试通过双击导航器左上角的粗体程序标题来重命名它,然后确认我想要检查items的名称已更改,当我尝试运行它时出现以下错误:"clang:error:链接器命令失败,退出代码为1(使用-v查看调用)"
我甚至尝试使用find工具查看所有名为previous name的内容,包括info.plist(我认为是问题)并将它们更改为新名称.通过手动重命名info.plist我得到一个错误,说不存在.
我究竟做错了什么?
我有一些我创建的自定义控件,我在新项目中使用它们.但是,我一直在界面生成器中遇到错误:
Failed to update auto layout status: Failed to load designables from path (null)
Run Code Online (Sandbox Code Playgroud)
要么
Failed to render instance of <control>: Failed to load designables from path (null)
Run Code Online (Sandbox Code Playgroud)
我已经测试了另一个项目中的控件,它们似乎在界面构建器中正确呈现,但我无法让它们在当前项目中工作.导致此错误的原因以及如何解决?
提前致谢...
我正在设计一个iOS应用程序,我希望在我的iPhone中按下返回键时,它会将我引导到下一个文本字段.
我发现了几个类似的问题,并且有很好的答案,但它们恰好都在Objective-C中,我正在寻找Swift代码,现在这就是我现在所拥有的:
func textFieldShouldReturn(emaillabel: UITextField) -> Bool{
return true
}
Run Code Online (Sandbox Code Playgroud)
它被放置在连接的文件和包含文本字段的UIView的控制器中,但我不确定这是不是正确的地方.
我基本上是新手,所以解释每一个小步骤,否则我会设法弄乱它.此外,我正在使用最新版本的Xcode,如果这有任何区别.
好的,所以我试了这个并得到了这个错误:
//could not find an overload for '!=' that accepts the supplied arguments
func textFieldShouldReturn(textField: UITextField) -> Bool {
let nextTag: NSInteger = textField.tag + 1
// Try to find next responder
let nextResponder: UIResponder = textField.superview!.viewWithTag(nextTag)!
if (nextResponder != nil) {
// could not find an overload for '!=' that accepts the supplied arguments
// Found next responder, so set it.
nextResponder.becomeFirstResponder()
} else {
// Not …Run Code Online (Sandbox Code Playgroud)