我有一个相对简单的核心数据sqlite数据库.我试图从DB一次获得结果.
NSFetchRequest* request = [[[NSFetchRequest alloc] init] autorelease];
[request setEntity:[...]];
[request setPredicate:[NSPredicate predicateWithFormat:@"flaggedTime != nil"]];
NSSortDescriptor* sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"flaggedTime" ascending:NO];
[request setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];
[request setFetchLimit:pageSize];
[request setFetchOffset:((pageIndex - 1) * pageSize)];
NSArray* results = [self.context executeFetchRequest:request error:NULL];
Run Code Online (Sandbox Code Playgroud)
pageSize为30,测试数据的pageIndex为1,2,3或4(DB中约有80个项目,因此pageIndex = 4应该不返回任何项目).谓词和排序工作正常,结果成功返回.获取限制也可以正常工作.没有错误返回.
问题:我总是从第一页获得结果,就像没有设置fetchOffset一样.我试图删除谓词和排序但无济于事.我可以使fetchOffset工作的唯一情况是当我使用30以下的值时.当然,这对于分页来说毫无意义...
有人知道为什么吗?我会非常感谢每一个答案.
更新:我说的是iOS.测试4.2和5.0.
更新2:简化问题.
NSFetchRequest* request = [[[NSFetchRequest alloc] init] autorelease];
[request setEntity:[...];
NSError* error = nil;
NSManagedObjectContext* context = [...];
NSUInteger count = [context countForFetchRequest:request error:&error];
assert(error == nil);
NSLog(@"Total count: %u", count);
request.fetchOffset = 0;
request.fetchLimit = …Run Code Online (Sandbox Code Playgroud) 我想获得一个地区的所有WiFi网络及其SSID值.但问题是如何使所有WiFi网络的SSID可用,即使我没有连接到一个.
如果我尝试运行以下代码:
photographer = photographer
Run Code Online (Sandbox Code Playgroud)
我收到错误:
为自己分配属性.
我想将属性分配给自己以强制photographer didSet块运行.
这是一个真实的例子:在2013年冬季斯坦福iOS课程(13:20)的"16. Segues and Text Fields"讲座中,教授建议编写类似如下的代码:
@IBOutlet weak var photographerLabel: UILabel!
var photographer: Photographer? {
didSet {
self.title = photographer.name
if isViewLoaded() { reload() }
}
}
override func viewDidLoad() {
super.viewDidLoad()
reload()
}
func reload() {
photographerLabel.text = photographer.name
}
Run Code Online (Sandbox Code Playgroud)
注意:我做了以下更改:(1)代码从Objective-C切换到Swift; (2)因为它在Swift中,我使用didSet属性的块而不是setPhotographer:方法; (3)而不是self.view.window我使用,isViewLoaded因为前者在访问view财产时错误地强迫视图加载; (4)该reload()方法(仅)为了简单起见而更新标签,因为它更接近我的代码; (5)IBOutlet添加了摄影师标签以支持这个更简单的代码; (6)由于我使用的是Swift,isViewLoaded()因为性能原因,检查不再存在,现在需要防止崩溃,因为IBOutlet被定义为UILabel!不UILabel? …
在Swift 2中,似乎在调用函数时并不总是需要第一个参数名称.现在在Swift 3中,调用函数时需要第一个参数名称.例如:
func frobnicate(runcible: String) {
print("Frobnicate: \(runcible)")
}
Run Code Online (Sandbox Code Playgroud)
Swift 2.2允许通过简单输入来调用函数:
Frobnicate("Station")
Run Code Online (Sandbox Code Playgroud)
Swift 3似乎要求我们使用方法的第一个参数名称,例如:
Frobnicate(runcible:"Station")
Run Code Online (Sandbox Code Playgroud)
Swift 3适用于所有功能和方法,还是仅适用于某些情况?
我正在尝试使用NSDateFormatter来解析这些格式中的任何一种格式的日期
@"2013-02-01T14:21:00"
Run Code Online (Sandbox Code Playgroud)
要么
@"2013-02-01T14:21:56.345"
Run Code Online (Sandbox Code Playgroud)
目前我使用下面的方法来解析字符串并返回一个日期:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"];
[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
NSDate *date = [dateFormatter dateFromString:dateToFormat];
Run Code Online (Sandbox Code Playgroud)
这适用于第一种日期样式,但对于包含毫秒部分的字符串返回nil.
我想我可以测试毫秒的存在并剥离它们,但我想知道我是否可以更改日期格式以将.SSS视为可选项?
谢谢你的帮助
问题:
使用swift 2.2在Xcode 7.3下运行以下代码时,编译器无法正确推断可选的类型:
import Foundation
func whatAmI<T>(inout property:T?)
{
switch property {
case is Int?:
print("I am an Int?")
case is String?:
print("I am a String?")
default:
print("I don't know what I am")
}
}
var string : String?
whatAmI(&string)
Run Code Online (Sandbox Code Playgroud)
在我身边使用Xcode 7.3,这将打印出来 I am an Int?
但是,当我在将变量传递给函数之前使用空字符串初始化变量时,开关会将其推断为String?.
这将I am a String?在之前的Xcode版本中打印.
你得到类似的结果吗?
观察:
使用此函数签名时也会出现同样的情况:
func whatAmI(property:AnyObject?)
Run Code Online (Sandbox Code Playgroud)
- 错误 -
这个问题是swift 2.2中的回归:https: //bugs.swift.org/browse/SR-1024
我目前正在配置一个新的Apple Provisioning Profile,我注意到有两个配置选项没有在任何地方记录(或隐藏在文档深处).
Enable for Passes
Enable for Data Protection
我知道"数据保护"在iOS上意味着什么,但我找不到任何提及此配置文件选项的文档.
你能帮我解释一下这些选项的含义吗?
所以我在这里浏览Apple文档 - Apple Docs
然后我遇到了这个..
public struct TrackedString {
public private(set) var numberOfEdits = 0
public var value: String = "" {
didSet {
numberOfEdits += 1
}
}
public init() {}
}
Run Code Online (Sandbox Code Playgroud)
如何public private(set)正确添加工作?如果你能展示一些比较神奇的更简单的例子/解释!
var mentions = ["@alex", "@jason", "@jessica", "@john"]
Run Code Online (Sandbox Code Playgroud)
我想将我的数组限制为3个项目,所以我想拼接它:
var slice = [String]()
if mentions.count > 3 {
slice = mentions[0...3] //alex, jason, jessica
} else {
slice = mentions
}
Run Code Online (Sandbox Code Playgroud)
但是,我得到了:
带有基类型'[String]'和索引类型'Range'的不明确的下标
Apple Swift 2.2版(swiftlang-703.0.18.8 clang-703.0.31)目标:x86_64-apple-macosx10.9
这是我的代码,其中出现错误:错误在第3行'如果让indexpath ...'
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "show Detail" {
if let indexPath = self.tableView.indexPathForSelectedRow {
let taakDetail : Taak = taken[(indexPath as NSIndexPath).row]
let controller = (segue.destination as! UINavigationController).topViewController as! DetailsViewController
controller.selectedTaak = taakDetail
}
}
Run Code Online (Sandbox Code Playgroud)
我无法找出这个含糊不清的东西.它所引用的代码是:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return taken.count
}
Run Code Online (Sandbox Code Playgroud) ios ×7
swift ×6
objective-c ×2
swift3 ×2
core-data ×1
didset ×1
properties ×1
swift2.2 ×1
tableview ×1