小编Sul*_*han的帖子

从核心数据请求分页结果

我有一个相对简单的核心数据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)

core-data objective-c ios

19
推荐指数
2
解决办法
1万
查看次数

如何使用swift在iOS中获取可用的wifi网络名称

我想获得一个地区的所有WiFi网络及其SSID值.但问题是如何使所有WiFi网络的SSID可用,即使我没有连接到一个.

ios swift

19
推荐指数
2
解决办法
8404
查看次数

如果我想为自己分配属性怎么办?

如果我尝试运行以下代码:

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? …

properties uiviewcontroller ios swift didset

19
推荐指数
3
解决办法
5471
查看次数

Swift 3的第一个参数名称

在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适用于所有功能和方法,还是仅适用于某些情况?

swift swift3

18
推荐指数
3
解决办法
1万
查看次数

如何使用NSDateFormatter和可选的毫秒部分解析ISO 8601

我正在尝试使用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视为可选项?

谢谢你的帮助

objective-c ios

17
推荐指数
1
解决办法
5401
查看次数

在swift 2.2中无法正确推断选项类型

问题:

使用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

swift swift2.2

15
推荐指数
1
解决办法
409
查看次数

配置供应配置文件

我目前正在配置一个新的Apple Provisioning Profile,我注意到有两个配置选项没有在任何地方记录(或隐藏在文档深处).

Enable for Passes
Enable for Data Protection

我知道"数据保护"在iOS上意味着什么,但我找不到任何提及此配置文件选项的文档.

你能帮我解释一下这些选项的含义吗?

ios provisioning-profile

11
推荐指数
1
解决办法
4565
查看次数

"public private(set)"访问修饰符如何工作?

所以我在这里浏览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)正确添加工作?如果你能展示一些比较神奇的更简单的例子/解释!

swift

11
推荐指数
3
解决办法
2259
查看次数

如何在Swift中执行数组切片?

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

ios swift

10
推荐指数
3
解决办法
1万
查看次数

对成员'tableView(_:numberOfRowsInSection :)'的模糊引用为什么会出现此错误?

这是我的代码,其中出现错误:错误在第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)

tableview ios swift3

10
推荐指数
1
解决办法
8789
查看次数