我有一个已经使用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) 当我从主屏幕使用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)
与此代码的快捷方式只打开应用程序初始视图控制器和不将helloVC和goodbyeVC其在不同的选项卡控制器.
我认为这是因为ViewControllers我试图加载嵌入在嵌入的内部UINavigationController以及嵌入内部UITabBarController.
我怎么能presentViewController …
uitabbarcontroller uinavigationcontroller ios presentviewcontroller swift
简短:我认为的图像在第一次加载后没有更新。URL 保持与之前加载的视图相同,但是不从存储中获取 URL 或数据的视图的其余部分被更新。
完整:我有两个视图, aListView和 a DetailView。
在ListViewI 中显示一个类型列表List。详细视图应该显示每个Profile来自List.profiles. 为此,我将每个字符串存储uid在其中List.profiles并调用model.fetchProfiles以获取所选每个列表的配置文件。
在第一个选择List model.fetchProfiles返回文档并model.profiles在DetailView.
当第一次装载DetailView了ProfileRow上出现被称为并记录配置文件获取。然后ProfileRow加载imageURL从imagePath,并用它喜欢来获取图像。
控制台:加载列表 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 …
所以我使用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) 我有一个使用 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) 所以我目前正在使用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) 我在故事板中创建了一个推送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) 我试图改变UINavigationBar.barTintColor从UIColor.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)
但是,这不起作用,有人知道我如何才能实现所追求的效果吗?
我不断收到错误
没有这样的模块“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 文件的目标成员身份是单独模块的一部分时,我得到了原始错误。
任何人都可以帮助我了解为什么会发生这种情况以及如何解决?
我的应用程序嵌入在一个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一点,用户无法切换标签?
我获取 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) 我有一个名为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)