小编Seb*_*ian的帖子

如何在Swift中将plist作为字典?

我正在使用Apple的新Swift编程语言并遇到一些问题......

目前我正在尝试读取一个plist文件,在Objective-C中我将执行以下操作以将内容作为NSDictionary获取:

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Config" ofType:@"plist"];
NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:filePath];
Run Code Online (Sandbox Code Playgroud)

如何在Swift中将plist作为字典?

我假设我可以通过以下方式获得plist的路径:

let path = NSBundle.mainBundle().pathForResource("Config", ofType: "plist")
Run Code Online (Sandbox Code Playgroud)

当这工作时(如果它是正确的?):我如何将内容作为字典?

还有一个更普遍的问题:

可以使用默认的NS*类吗?我想是这样......或者我错过了什么?据我所知,默认框架NS*类仍然有效,可以使用吗?

ios swift

185
推荐指数
14
解决办法
16万
查看次数

NSFetchedResultsController - 与节名称不同的排序顺序

我有一个NSManagedObject用于分组UITableView中的部分.该对象具有"name"和"createdAt"属性.我想在te UI中使用"name"作为节标题,但是按"createdAt"排序.根据文档,第一个sortDescriptor键也必须是NSFetchedResultsController的sectionNameKeyPath.

我建议使用两个sortDescriptors,但它不起作用.这些部分仍按名称排序.

- (NSFetchedResultsController *)fetchedResultsController {
  if (_fetchedResultsController != nil) {
      return _fetchedResultsController;
  }

  NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
  NSEntityDescription *entity = [NSEntityDescription entityForName:@"Object" inManagedObjectContext:[CoreDataHelper instance].managedObjectContext];
  [fetchRequest setEntity:entity];

  NSSortDescriptor *sortName = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
  NSSortDescriptor *sortDate = [[NSSortDescriptor alloc] initWithKey:@"createdAt" ascending:YES];

  [fetchRequest setSortDescriptors:[NSArray arrayWithObjects:sortName, sortDate, nil]];

  [fetchRequest setFetchBatchSize:20];

  NSFetchedResultsController *theFetchedResultsController =
  [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
                                    managedObjectContext:[CoreDataHelper instance].managedObjectContext sectionNameKeyPath:@"name"
                                               cacheName:@"Root"];
  self.fetchedResultsController = theFetchedResultsController;

  return _fetchedResultsController;
}
Run Code Online (Sandbox Code Playgroud)

core-data nsfetchedresultscontroller ios

12
推荐指数
1
解决办法
7748
查看次数

静态UITableViewCell中的UISwitch会生成错误

我想创建一个带有各种选项的UIViewController,每个选项都可以通过UISwitch启用/禁用.我正在使用Xcode 5和iOS 7部署目标.UITableView包含静态单元格.界面在故事板中创建.

当我将UISwitch添加到单元格(对它contentView)时,我收到此错误:

Exception while running ibtool: *** setObjectForKey: object cannot be nil (key: objectID)
Run Code Online (Sandbox Code Playgroud)

是不是可以将UISwitch添加到静态UITableViewCell?删除UISwitch时,错误消失.

在此输入图像描述

uitableview uiswitch ios7

7
推荐指数
1
解决办法
1968
查看次数

Cocoapods - 隐藏实施?

我有一个我创建的iOS库.现在我把这个lib放在一个.framework只有一些.h文件的文件中.现在我想使用Cocoapods而不是框架.

是否可以隐藏.m文件并仅显示一些头文件(如框架)?

根据这个问题,我不明白podspec设置source_files和之间的关系public_header_files.

我认为这public_header_files将是我需要的选项,但我不明白这个属性在做什么.

编辑: 我想我误解了Cocoapods的设计.public_header_files在使用use_framework!设置时似乎有意义.也许我正在尝试迦太基.

ios cocoapods

6
推荐指数
1
解决办法
1171
查看次数

过滤巨大的NSArray

我正在使用NSPredicate过滤NSArray并将过滤后的数组用于我的UITableView.当用户在UITextField中输入文本时,我正在使用此过滤.因此,每次UITextField中的文本发生更改时,我都会调用我的过滤器函数.

它看起来像这样:

NSArray *hugeArray = ...;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == %@", input];
_resultArray = [hugeArray filteredArrayUsingPredicate:predicate];
[_myTableView reloadData];
Run Code Online (Sandbox Code Playgroud)

当我使用带有大量对象的NSArray时,输入变得非常慢(UI中的完整输入变慢).是否有可能获得更好的性能或在后台运行已过滤的命令?

不应阻止在UITextField中写入内容.当UITableView在输入后很短的时间后刷新它可能没问题.

nsarray nspredicate ios

4
推荐指数
1
解决办法
2492
查看次数

NSManagedObject保持错误

我的情况:假设我有一个类Person(NSManagedObject的子类).每次用户单击按钮时,都会创建一个新的Person实例并将其添加到全局NSMutableArray中.此外,新创建的Person实例将添加到子上下文中,如下所示:

NSManagedObjectContext *childContext = [[NSManagedObjectContext alloc] initWithConcurrencyType: NSPrivateConcurrencyType];
[childContext setParentContext: _mainContext];
Run Code Online (Sandbox Code Playgroud)

此外,当单击按钮时,我保存上下文:(它有点复杂,但遵循此结构)

[childContext performBlock:^{
    [childContext save:nil];
    [_mainContext save:nil];
}];
Run Code Online (Sandbox Code Playgroud)

单击两次或多次(不确定是否取决于总点击次数)后,我的数组中的按钮对象就变为了fault.

根据文档:访问故障对象的属性应该加载持久对象.
即使我访问NSManagedObject的属性,对象仍然是错误的,属性是nil.

为什么对象在我的数组中出错?如何访问故障对象的属性?

编辑:

加载UIViewController时,我从数据存储区中获取所有现有对象:

-(NSArray*)fetchPersons {
    NSManagedObjectContext *context = [self managedObjectContext]; //this is _mainContext, it is created with initWithConcurrencyType:NSMainQueueConcurrencyType
    NSFetchRequest  *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *description = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:context];
    [fetchRequest setEntity:description];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"key = %i", aCondition];
    [fetchRequest setPredicate:predicate];
    return [context executeFetchRequest:fetchRequest error:nil];
}
Run Code Online (Sandbox Code Playgroud)

我正在使用这个NSArray fetchPersons来填充NSMutableArray. …

core-data ios

4
推荐指数
1
解决办法
4216
查看次数

GCDWebServer - 文档中的静态文件

我正在使用 GCDWebServer 在我的设备上创建一个 HTTP 服务器。网页的实际内容放置在我的应用程序的 Documents 文件夹中。内容包含一个带有引用的 css 和 png 文件的 HTML 文件。问题是 css 和 png 文件无法从服务器访问/使用(我只能看到 HTML 文本内容)。

相关代码:

self.server = [[GCDWebServer alloc] init];

NSString *documents = [[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject] absoluteString];
documents = [documents stringByAppendingPathComponent:@"MyWebsite"];

[self.server addGETHandlerForBasePath:@"/" directoryPath:documents indexFilename:nil cacheAge:0 allowRangeRequests:YES];

__weak typeof(self) weakSelf = self;

[_server addDefaultHandlerForMethod:@"GET" requestClass:[GCDWebServerRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest *request) {

        if ([[request path] isEqualToString:@"/status"]) {

            return [GCDWebServerDataResponse responseWithText:@"RUNNING"];
        }

        else if ([[request path] isEqualToString:@"/"]) {

            NSString *filePath = [documents stringByAppendingPathComponent:@"mypage.html"];
            NSString *html = …
Run Code Online (Sandbox Code Playgroud)

objective-c ios gcdwebserver

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