小编Ril*_*Dev的帖子

如何在Swift项目中使用Ensembles框架

我有一个已经使用Core Data的项目.我已经添加了对iPad的支持,但现在需要使用iCloud和Core Data来同步数据.

我遇到了Ensembles,它似乎是一个简单而强大的框架,可以添加到我的项目中.在这里找到:https://github.com/drewmccormack/ensembles

但是,Ensembles项目中没有Swift示例项目,所以我自己试图这样做.以下是我采取的步骤,

步骤1

手动将Ensembles添加到iOS项目中.

第2步

使用现有的持久存储.sql文件创建新的CoreDataStack.

import UIKit
import CoreData

class CoreDataStack: NSObject, CDEPersistentStoreEnsembleDelegate {

    static let defaultStack = CoreDataStack()

    var ensemble : CDEPersistentStoreEnsemble? = nil
    var cloudFileSystem : CDEICloudFileSystem? = nil

    // MARK: - Core Data stack

    lazy var storeName : String = {
        return NSBundle.mainBundle().objectForInfoDictionaryKey(kCFBundleNameKey as String) as! String
    }()


    lazy var sqlName : String = {
        return "SingleViewCoreData.sqlite"
    }()


    lazy var icloudStoreName : String = {
        return self.storeName + "CloudStore"
    }() …
Run Code Online (Sandbox Code Playgroud)

core-data ios icloud swift ensembles

8
推荐指数
0
解决办法
884
查看次数

如何在UITabBarController和UINavigationBarController中嵌入presentViewController

当我从主屏幕使用3D Touch Shortcuts时,我试图转向不同的视图控制器.

应用程序嵌入在一个UITabBarController并且每个选项卡根控制器是一个UINavigationController.

以下是我尝试处理快捷方式以加载每个快捷方式的视图控制器的方法.

private func handleShortcutItem(shortcutItem: UIApplicationShortcutItem) {

    if let rootViewController = window?.rootViewController, let shortcutItemType = ShortcutItemType(shortcutItem: shortcutItem) {
    let sb = UIStoryboard(name: "main", bundle: nil)

        let helloVC = sb.instantiateViewControllerWithIdentifier("HelloVC") as! HelloViewController
        let goodbyeVC = sb.instantiateViewControllerWithIdentifier("GoodbyeVC") as! GoodbyeViewController

        switch shortcutItemType {
        case .Hello:
            rootViewController.presentViewController(helloVC, animated: true, completion: nil)
            break
        case .Goodbye:
            rootViewController.presentViewController(goodbyeVC, animated: true, completion: nil)
            break
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

与此代码的快捷方式只打开应用程序初始视图控制器和不将helloVCgoodbyeVC其在不同的选项卡控制器.

我认为这是因为ViewControllers我试图加载嵌入在嵌入的内部UINavigationController以及嵌入内部UITabBarController.

我怎么能presentViewController …

uitabbarcontroller uinavigationcontroller ios presentviewcontroller swift

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

如何使用获取的数据刷新视图 - Firestore 和 SwiftUI

简短:我认为的图像在第一次加载后没有更新。URL 保持与之前加载的视图相同,但是不从存储中获取 URL 或数据的视图的其余部分被更新。

完整:我有两个视图, aListView和 a DetailView

ListViewI 中显示一个类型列表List。详细视图应该显示每个Profile来自List.profiles. 为此,我将每个字符串存储uid在其中List.profiles并调用model.fetchProfiles以获取所选每个列表的配置文件。

在第一个选择List model.fetchProfiles返回文档并model.profilesDetailView.

当第一次装载DetailViewProfileRow上出现被称为并记录配置文件获取。然后ProfileRow加载imageURLimagePath,并用它喜欢来获取图像。

控制台:加载列表 1

CARD DID APPEAR: Profiles []
CARD DID APPEAR: SortedProfiles [] CARD ROW
CARD ROW DID APPEAR: Profiles profiles/XXXXXX/Profile/profile.png
CARD ROW DID APPEAR: SortedProfiles profiles/XXXXXX/Profile/profile.png
从图片获取网址路径:profiles/XXXXXX/Profile/profile.png
图片网址:https : //firebasestorage.googleapis.com/APPNAME/profiles%XXXXXXX …

firebase google-cloud-firestore swiftui combine

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

错误:"消息回复花了太长时间" - WCSession观看OS2

所以我使用Watch Connectivity来请求从iPhone到Watch的阵列.

这个想法sendMessage来自手表,iPhone将在didReceiveMessage方法中回复数组.

然而,iPhone似乎没有响应,我认为iPhone会在我从Watch发送消息时打开应用程序.我甚至尝试打开应用程序,sendMessage但仍然没有运气.当我等待足够长时间时,我收到以下错误消息:

错误域= WCErrorDomain代码= 7012"消息回复花了太长时间." UserInfo = {NSLocalizedDescription =消息回复耗时太长.,NSLocalizedFailureReason =发生回复超时.}

有人知道我哪里出错吗?

Apple Watch

import WatchKit
import Foundation
import CoreData
import WatchConnectivity

class BookmarkedInterfaceController: WKInterfaceController, WCSessionDelegate {

var session : WCSession!
var objects: [AnyObject]!

@IBOutlet var table: WKInterfaceTable!

override func willActivate() {
    super.willActivate()
    //Check if session is supported and Activate
    if (WCSession.isSupported()) {
        session = WCSession.defaultSession()
        session.delegate = self
        session.activateSession()
    }
    sendMessageToIphone()
}
func sendMessageToIphone() {
    if WCSession.defaultSession().reachable {

        print("WCSession is reachabe")

        let …
Run Code Online (Sandbox Code Playgroud)

ios swift watchconnectivity wcsession

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

SwiftUI 和 Mac Catalyst | 添加按钮到尾部导航栏

我有一个使用 SwiftUI 构建的 Mac Catalyst 应用程序,但我似乎无法向尾随导航栏添加按钮?

我也不确定这个 navigationBar 是在哪里定义的,是否可以删除?它似乎只出现在文图拉。

在此输入图像描述

struct AppSidebarNavigation: View {
  
enum NavigationItem {
    case home
}

@State private var selection: NavigationItem? = .home

init() {

    #if !targetEnvironment(macCatalyst)
    UITableView.appearance().backgroundColor = UIColor(named: "White")
    UITableViewCell.appearance().selectionStyle = .none
    UITableView.appearance().allowsSelection = false

    #endif

}

var body: some View {
    NavigationView {
        sidebar
            .navigationTitle("")
            .navigationBarTitleDisplayMode(.inline)


        // Main View
        HomeView()
            .navigationTitle("")
            .edgesIgnoringSafeArea(.top)
            .navigationBarHidden(isMac ? false : true)
            .navigationBarBackButtonHidden(isMac ? false : true)
    }
    .accentColor(Color("Black"))
    .navigationViewStyle(.columns)

}
}
Run Code Online (Sandbox Code Playgroud)

HomeView 我有以下视图。

#if targetEnvironment(macCatalyst)
.navigationBarItems(trailing:
    NavButtons
) …
Run Code Online (Sandbox Code Playgroud)

ios swift swiftui mac-catalyst

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

无法使用Int类型下标类型'[NSIndexPath]'的值

所以我目前正在使用Xcode 7 beta将项目转换为Swift 2,我目前收到的错误是:

无法下标类型'[NSIndexPath]?'的值 'Int'类型

对于以下代码:

let indexPath = indexPaths[0] as! NSIndexPath
Run Code Online (Sandbox Code Playgroud)

当用户在UICollectionViewusing prepareForSegue方法中选择一个单元格时尝试将数据传递给视图控制器.

这是完整的prepareForSegue方法.我不确定这是否是Swift 2错误,但在使用Swift 1.1 for iOS 8.4时它可以正常工作.

 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    if segue.identifier == "details" {
    let vc = segue.destinationViewController as! DetailsViewController

    let indexPaths = self.collectionView.indexPathsForSelectedItems()
    let indexPath = indexPaths[0] as! NSIndexPath

    let selectedItem = items[indexPath.row]

    vc.selectedItem = selectedItem

    }
}
Run Code Online (Sandbox Code Playgroud)

ios uicollectionview swift

5
推荐指数
1
解决办法
3005
查看次数

没有为WKInterfaceTable调用didSelectRowAtIndex

我在故事板中创建了一个推送segue从一个 WKInterfaceTableCell到另一个WKInterfaceController(称为DetailInterfaceController).

当我点击该行时, didSelectRowAtIndex未被调用.

有人知道我哪里错了,我怎么能传递字符串?

TableInterfaceController

didSelectRowAtIndexPath print 语句未被调用

@IBOutlet var table: WKInterfaceTable!
var objectsArray = ["1","2","3"]
var object: String!

override func table(table: WKInterfaceTable, didSelectRowAtIndex rowIndex: Int) {
    self.object = self.objectsArray[rowIndex]

    print(" object title: \(self.object)")
}


override func contextForSegueWithIdentifier(segueIdentifier: String) -> AnyObject? {
    // You may want to set the context's identifier in Interface Builder and check it here to make sure you're returning data at the proper times

    // Return data to be …
Run Code Online (Sandbox Code Playgroud)

ios swift watchkit wkinterfacetable

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

用户滚动时如何更改UINavigationBar barTintColor

我试图改变UINavigationBar.barTintColorUIColor.clearColor()whiteColor()用户滚动的时候,还变回清除,当用户滚动返回到视图的顶部。

这就是我一直在尝试的东西;

ViewDidLoad

self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.backgroundColor = UIColor.clearColor()
self.navigationController?.navigationBar.tintColor = UIColor.whiteColor()
self.navigationController?.navigationBar.barTintColor = UIColor.clearColor()
Run Code Online (Sandbox Code Playgroud)

scrollViewDidScroll

override func scrollViewDidScroll(scrollView: UIScrollView) {
  self.navigationController?.navigationBar.shadowImage = UIImage()
  self.navigationController?.navigationBar.backgroundColor = UIColor.whiteColor()
  self.navigationController?.navigationBar.tintColor = UIColor.redColor()
  self.navigationController?.navigationBar.barTintColor = UIColor.whiteColor()
}
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用,有人知道我如何才能实现所追求的效果吗?

uinavigationbar ios swift

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

Xcode:没有这样的模块“Alamofire”

我不断收到错误

没有这样的模块“Alamofire”

在我的 Xcode 项目 swift 文件中使用时import Alamofire;该文件位于项目内的单独模块中。

我尝试了以下方法;

  • 构建和运行Alamofire目标
  • 注释掉导入Alamofire并运行项目,然后取消注释并再次构建
  • 确保我使用的是<MyProject>.xcworkspacenot.xcodeproj
  • $(inherited)在项目中使用> 构建设置 > 构建选项 > ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES

  • 更新 Cocoapods,删除并重新安装依赖项

但是,当我打开 swift 文件的检查器窗口时,目标成员身份同时选中了主应用程序和模块框。

在此处输入图片说明

当我取消选中文件所在的模块时,在我的seperateModuleTests文件中,我无法使用 swift 文件中使用的类,因为我收到错误;

使用未声明的类型

&&

使用未解析的标识符“ClassName”

当我取消选中用于测试的类的 swift 文件的目标成员资格时,seperateModuleTests似乎无法识别 swift 文件中的类。但是,当我检查 swift 文件的目标成员身份是单独模块的一部分时,我得到了原始错误。

任何人都可以帮助我了解为什么会发生这种情况以及如何解决?

xcode ios xctest swift

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

使用Modal View Controller和UITabBarController以及UINavigationBar

我的应用程序嵌入在一个UITabBarController并有4个选项卡.4个标签中的3个嵌入其中,UINavigationControllers而另一个不嵌入.

我发现如果ViewController有一个NavigationBar和我正在使用present view controller modallysegueing,并且呈现控制器define context选择了模态视图出现在NavigationBar和下面UITabBar.如果define context未选择,则模态视图将显示在UINavigationBar但仍位于其下方UITabBar.像那样,

在此输入图像描述

这里的问题是,因为在用户Modal View Controller下方呈现,UITabBar仍然可以UITabBar在解除之前访问和更改选项卡,这会导致黑屏.

但是如果presenting view controller没有得到UINavigationBar并且没有被define context选中那么modal view controller将占据整个视图并显示在上方UITabBar.这意味着用户在解除模态视图之前无法切换选项卡.这是我想要的效果,但是如何在使用时实现这UINavigationBar一点,用户无法切换标签?

xcode ios swift

0
推荐指数
1
解决办法
1493
查看次数

[NSDictionaryI setObject:forKey:]: 无法识别的选择器发送到实例

我获取 JSON 数据并将其存储在“NSUserDefaults”中,然后我尝试检索以从字典中添加或删除对象,但是我收到错误

无法识别的选择器发送到实例

当添加到 NSMutableDictionary

 // new dict
    NSMutableDictionary *userTranslations = [NSMutableDictionary new];

    for (NSString *key in keys) {
        [userTranslations setObject:dicky[key] forKey:key];
    };

 // then add that dictionary as the key for uid
    [artworkTranslations setObject:userTranslations forKey:uid];
Run Code Online (Sandbox Code Playgroud)

JSON 数据

{
  people =     {
    "title" = "Hello";
    "details" = "Amet justo donec enim diam vulputate.<br><br>Ut etiam sit amet nisl. Mattis vulputate enim nulla aliquet porttitor.<br><br>Euismod quis viverra nibh cras pulvinar mattis nunc sed blandit. Dis parturient montes nascetur ridiculus mus.";
  }; …
Run Code Online (Sandbox Code Playgroud)

objective-c nsdictionary ios

0
推荐指数
1
解决办法
726
查看次数

数组索引超出范围 - 可选解除绑定时出错

我有一个名为type Settings的属性调用的实体,如果它是1,那么视图控制器将具有白色背景,如果为0,则背景为深灰色.backgroundColorInt

但是在尝试打开视图控制器时出现以下错误;

致命错误:数组索引超出范围

对于我的函数中的以下行

    if settingsArray.count == 1 {
        setting = settingsArray[1]
    } else if settingsArray.count <= 0 {
      println("No settings in array")
    }
Run Code Online (Sandbox Code Playgroud)

查看控制器

var settingsArray: [Settings]! 
var setting: Settings!
var backgroundSetting: Bool = true

override func viewWillAppear(animated: Bool) {
    backgroundSettings()
}

override func viewDidLoad() {
    super.viewDidLoad()
    backgroundSettings()
}

// Function to fetch settings and change background
func backgroundSettings() {

    var error: NSError?
    let request = NSFetchRequest(entityName: "Settings")
    self.settingsArray = moc?.executeFetchRequest(request, …
Run Code Online (Sandbox Code Playgroud)

arrays core-data optional ios swift

-1
推荐指数
1
解决办法
397
查看次数