归档并将我的应用程序(使用Xcode 7.2.1)上传到iTunes Connect后,我收到来自iTunes Connect的电子邮件说:
无效斯威夫特支持 - 手表OS应用程序在两个/负载/今天的Menu.app/TodaysReactiveMenuWatch.app/TodaysReactiveMenuWatch Extension.appex /框架/和/负载/今天的Menu.app/TodaysReactiveMenuWatch.app/Frameworks/斯威夫特库.从其中一个位置删除所有Swift库,然后重新提交您的应用程序.
我的项目包含iOS应用程序和watchOS应用程序.所有目标都设置了"嵌入式内容包含Swift代码"标志,YES因为我的所有源文件都是用Swift编写的.
我的pod文件包含以下内容:
use_frameworks!
# ignore all warnings from all pods
inhibit_all_warnings!
def shared_pods
pod 'ReactiveCocoa', '4.0.1'
pod 'Alamofire', '~> 3.1.4'
pod 'Unbox', '~> 1.3'
end
target 'TodaysReactiveMenu' do
platform :ios, '9.0'
shared_pods
pod 'Fabric', '~> 1.6.0'
pod 'Crashlytics', '~> 3.4.0'
pod 'PureLayout', '~> 3.0.1'
end
target 'TodaysReactiveMenuTests' do
end
target 'TodaysReactiveMenuWatch Extension' do
platform :watchos, '2.0'
shared_pods
end
Run Code Online (Sandbox Code Playgroud)
我正在使用CocoaPods 1.0.0.beta.4.关于我如何解决这个问题的任何想法?
我有一个服务器向我发送推送通知,让我们说我手机上有5个通知.如果我打开其中一个,其他所有通知都会消失.我只希望点击的一个消失.
这是我处理接收通知的方式:
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
if ( application.applicationState == UIApplicationState.Inactive || application.applicationState == UIApplicationState.Background )
{
// navigating user to a view controller
}
application.applicationIconBadgeNumber = 0
}
Run Code Online (Sandbox Code Playgroud) 最近几天我试图从d00m调试网络错误.我开始缺乏想法/线索,我希望其他SO用户拥有可能有用的宝贵经验.我希望能够提供所有相关信息,但我个人无法控制服务器环境.
整个事情始于用户注意到我们的应用程序中的几个"网络错误".该错误似乎是随机发生的,没有任何与互联网连接,iOS版本或后端更新相关的明显模式.幕后发生的两个错误是:
Error Domain=NSURLErrorDomain Code=-1001 "The request timed out."
并且更频繁地:
Error Domain=kCFErrorDomainCFNetwork Code=-1005 "The network connection was lost.
经过几天的调试后,我设法通过触发大约重现这些错误(随机发生).向我们的后端发出10个随机(GET和POST)请求,每个请求之间有一个随机睡眠定时器(设置为1-20秒).但是,它只发生在一些时期.我在过去几天经历的是,当一段"错误时期"开始时,我每运行一次或两次错误就会得到一个错误(意味着错误率为1/10或1/20请求) ).此错误率持续几个小时,然后错误消失了几个小时,然后它全部开始.
关于设置的一些快速事实:
NSURLSession用于我们的网络请求.我们还包含AFNetworking(更新到最新版本),但我们只使用安全部分进行SSL固定.即使SSL钉扎完全关闭,错误仍然会发生.我在过去几天写下的一些调查结果:
keep-alive讨论的错误有关.但是,我们的运营部门已经设置了一个新的临时环境,它发送与生产环境相同的标头,但这并没有使登台环境发生错误.keep-alive我的直觉表明它与服务器环境和iOS中的HTTP实现有关.然而,我无法找到一个可以证明什么的令人信服的模式.我使用简单的Rails脚本进行了相同的设置,当下一个"错误周期"发生时,我将准备尝试在iOS之外重现它.发生这种情况时我会更新问题.
我不是在寻找涉及重置wifi设置,关闭模拟器或类似设备的解决方案,因为我认为这不是生产环境中可行的解决方案.我也考虑过在GitHub问题中提到的重试循环修复,但我认为这是最后的手段.
如果您需要更多信息,请与我们联系.
Swift 3(Xcode 8 beta 6)目前在"递归协议约束"方面存在限制.这里是一个开放的问题在这里,而且有类似的讨论正在进行这里,这里和这里.但是,我仍然没有看到应该如何解决这个限制.可能吗?
让我们考虑一个引用视图模型的视图的简单示例,反之,不要考虑ref/value类型以及任何保留周期:
protocol ViewModelType {
associatedtype V: ViewType
var view: V { get }
}
struct ViewModel<V: ViewType>: ViewModelType {
var view: V
}
protocol ViewType {
associatedtype VM: ViewModelType
var viewModel: VM { get }
}
struct View<VM: ViewModelType>: ViewType {
var viewModel: VM
}
Run Code Online (Sandbox Code Playgroud)
使用上面的代码,您将遇到Type may not reference itself as a requirement提供的链接中讨论的内容.
然后(像我一样天真),我以为我可以通过这样做来解决这个问题:
protocol _ViewModelType {}
protocol ViewModelType: _ViewModelType {
associatedtype V: _ViewType
var …Run Code Online (Sandbox Code Playgroud) 我最近一直在阅读ReactiveCocoa v3,而我正在努力设置基本的东西.我已经阅读了变更日志,测试,少数SO问题和Colin Eberhardt关于这个主题的文章.但是,我仍然缺少基本绑定的示例.
假设我有一个提供当天菜单的应用程序.该应用程序正在使用RAC3和MVVM模式.
型号(菜单)
该模型有一个简单的方法来获取今天的菜单.至于现在,这不做任何网络请求,它基本上只是创建一个模型对象.该mainCourse物业是一个String.
class func fetchTodaysMenu() -> SignalProducer<Menu, NoError> {
return SignalProducer {
sink, dispoable in
let newMenu = Menu()
newMenu.mainCourse = "Some meat"
sendNext(sink, newMenu)
sendCompleted(sink)
}
}
Run Code Online (Sandbox Code Playgroud)
ViewModel(MenuViewModel)
视图模型公开了不同的String变量,让视图控制器显示菜单.让我们只添加一个属性来显示主菜.
var mainCourse = MutableProperty("")
Run Code Online (Sandbox Code Playgroud)
我们为这个属性添加一个绑定:
self.mainCourse <~ Menu.fetchTodaysMenu()
|> map { menu in
return menu.mainCourse!
}
Run Code Online (Sandbox Code Playgroud)
ViewController(MenuViewController)
最后但同样重要的是,我想在视图中介绍这个主要课程.我会UILabel为此添加一个.
var headline = UILabel()
Run Code Online (Sandbox Code Playgroud)
最后我想text通过观察我的视图模型来设置该UILabel 的属性.像这样的东西:
self.headline.text <~ viewModel.headline.producer
Run Code Online (Sandbox Code Playgroud)
遗憾的是,这不起作用.
问题
fetchTodaysMenu()返回一个SignalProducer<Menu, NoError> …我在Core Data中有一个表,其中包含以下属性:
date, name, phone
Run Code Online (Sandbox Code Playgroud)
我想检索5个唯一的电话号码列表,其名称按日期排序.所以在MySQL中它会是这样的:
SELECT name, phone FROM myTable GROUP BY phone ORDER BY date
Run Code Online (Sandbox Code Playgroud)
所以,如果我有这个数据列表:
01/23/2015 someName1 12345678
01/21/2015 someName2 12345678
01/21/2015 someOtherName1 987654321
Run Code Online (Sandbox Code Playgroud)
我想检索一个唯一电话号码列表,其中日期字段控制与任何重复号码相关联的名称.在这种情况下,期望的结果将是:
01/23/2015 someName1 12345678
01/21/2015 someOtherName1 987654321
Run Code Online (Sandbox Code Playgroud)
但是这样做NSFetchRequest有点复杂,因为setPropertiesToGroupBy需要包含相同的属性列表setPropertiesToFetch.
换句话说,这就是我认为我能够做到的方式:
NSEntityDescription *entity = [NSEntityDescription entityForName:@"someEntity" inManagedObjectContext:someContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entity];
[request setResultType:NSDictionaryResultType];
[request setPropertiesToFetch:@[@"name", @"phone"]];
[request setPropertiesToGroupBy:@[@"phone"]];
[request setFetchLimit:5];
NSSortDescriptor *sortByCreatedDate = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:NO];
[request setSortDescriptors:@[sortByCreatedDate]];
Run Code Online (Sandbox Code Playgroud)
但是,propertiesToGroupBy除非我也包含该name字段,否则我将获得例外.
如何在不必手动浏览列表的情况下实现我想要的目标?
我正在尝试将使用Facebook的KVOController的objc应用程序移植到Swift.我被鼓励将RC3看成是一种替代的,更加迅捷的方法.我已经阅读了一些博客,我很鼓励尝试一下.但是很多文档和博客似乎都集中在套接字和定时器上作为例子.所以我现在有两个简单的问题:
1)给出一个objc片段,如:
[self.KVOController observe: self.site keyPath: @"programs" options: NSKeyValueObservingOptionInitial block:^(id observer, id object, NSDictionary *change) {
[self.tableView reloadData];
}];
Run Code Online (Sandbox Code Playgroud)
用RC3 API重写这个的简单方法是什么?self.KVOController unobserve: self.site当视图卸载时,RC3等效于什么?
2)建议我使用Carthage来获取RC3代码.我可以混用一个Cartfile安全与使用可可豆荚已经为项目Alamofire和SwiftyJSON?
key-value-observing reactive-cocoa swift carthage reactive-cocoa-3
我遵循quick blox给出的指令如下:
从sdk 2.6.1开始添加对特定模块的依赖只需添加:
dependencies
{
compile("com.quickblox:quickblox-android-sdk-chat:2.6.1")
}
Run Code Online (Sandbox Code Playgroud)
SDK模块自动包含传递模块依赖项.
但是,我无法同步gradle文件,因为它显示错误:
Fail to resolve: com.quickblox:quickblox-android-sdk-chat:2.6.1
请帮助我,我无法使用最新版本启动快速blox.
从Swift 1.2开始,可以自动将Swift中的枚举转换为Objective-C.但是,据我所知,无法转换枚举数组.这是真的?
所以,这是可能的:
@objc public enum SomeEnumType: Int {
case OneCase
case AnotherCase
}
Run Code Online (Sandbox Code Playgroud)
但这不是:
public func someFunc(someArrayOfEnums: Array<SomeEnumType>) -> Bool {
return true
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以验证吗?你会如何推荐解决这个问题?一种方法是有两个方法声明,例如:
// This will not automatically get bridged.
public func someFunc(someArrayOfEnums: Array<SomeEnumType>) -> Bool {
return true
}
// This will automatically get bridged.
public func someFunc(someArrayOfEnums: Array<Int>) -> Bool {
return true
}
Run Code Online (Sandbox Code Playgroud)
但这会污染Swift接口.有没有办法隐藏任何Swift消费者的第二个函数声明?
我在ReactiveCocoa世界中仍然相当新,我只是想澄清这个常见的场景.我注意到其他人在GitHub和SO上都在努力解决这个问题,但我仍然错过了一个正确的答案.
以下示例确实有效,但我看到Justin Summers说订阅内订阅或订阅通常可能是代码味道.因此,我想在学习这个新范例时尝试避免坏习惯.
所以,这个例子(使用MVVM)非常简单:
和代码.
1(ViewController):
RAC(self.loginButton, rac_command) = RACObserve(self, viewModel.loginCommand);
Run Code Online (Sandbox Code Playgroud)
2(ViewModel):
self.loginCommand = [[RACCommand alloc] initWithEnabled:canLoginSignal
signalBlock:^RACSignal *(id input) {
return [[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
BOOL success = [username isEqualToString:@"user"] && [password isEqualToString:@"password"];
// Doesn't really make any sense to use sendNext here, but lets include it to test whether we can handle it in our viewmodel or viewcontroller
[subscriber sendNext:@"test"];
if (success)
{
[subscriber sendCompleted];
} else {
[subscriber sendError:nil];
}
// Cannot cancel …Run Code Online (Sandbox Code Playgroud) 我想做一个[Test]接收参数的操作,而不是使用[TestCase]该参数可以采用多个值。我似乎找不到办法做到这一点。
这是我想做的:
[Test]
static public void NUnitWriter(int errorCode)
{
Assert.AreEqual (0, errorCode);
}
Run Code Online (Sandbox Code Playgroud)
该函数只接收一个错误代码,如果它不为 0(出现问题),则断言。
ios ×6
swift ×6
objective-c ×3
c# ×1
carthage ×1
cocoapods ×1
core-data ×1
ios7 ×1
ios8 ×1
networking ×1
nsurlsession ×1
nunit ×1
quickblox ×1
swift3 ×1
watchos-2 ×1