小编dbm*_*mrq的帖子

如何在iOS 11中处理应用内购买的应用商店付款?

我正在尝试实现这种新paymentQueue(_:shouldAddStorePayment:for:)方法,以便我的应用程序可以直接从App Store处理IAP.

我正在使用itms-services://网址来测试它,就像它在这里说的那样.

问题是,我SKPaymentTransactionObserver是一个特定的视图控制器,如果在打开itms-services://链接时它不可见,则不会调用委托方法.

我该怎么办?我想我必须检测用户是否来自App Store推送正确的视图控制器,但我不知道如何.我现在能想到的唯一另一个选择就是让App Delegate成为一个SKPaymentTransactionObserver,但这看起来真的很麻烦,当我尝试它时我无法让它工作.还有其他方法吗?

app-store in-app-purchase ios ios11

9
推荐指数
1
解决办法
3776
查看次数

keyboardWillShow被调用其他应用程序的键盘

我知道这是应该发生的事情,但它导致了我不知道如何修复的问题.

我想在键盘显示时向上移动我的视图,以便我的文本字段保持可见.

我的文本字段有数字键盘.

我使用通知并keyboardWillShow/Hide在选择文本字段时向上/向下移动视图.

现在假设我点击一个文本字段,然后切换到另一个使用不同键盘(而不是数字键盘)的应用程序.keyboardWillShow用错误键盘的大小调用(来自另一个应用程序的键盘)并且我的视图移动的数量错误(它根本不应该移动).因此,当我回到我的应用程序时,我的视图位于错误的位置,键盘甚至没有显示,然后keyboardWillHide被调用,视图被移回原位(无处不在).但首先keyboardWillShow不应该为其他应用程序调用它.

我正在删除通知viewWillDisappear,但这仍然发生...也许keyboardWillShow是在viewWillDisappear为我的之前调用其他应用程序?

这是我的代码:

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillShow:", name: UIKeyboardWillShowNotification, object: nil)
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillHide:", name: UIKeyboardWillHideNotification, object: nil)
    for subview in self.view.subviews {
        if subview.isKindOfClass(UITextField) {
            let textField = subview as! UITextField
            textField.addTarget(self, action: "textFieldDidReturn:", forControlEvents: UIControlEvents.EditingDidEndOnExit)
            textField.addTarget(self, action: "textFieldDidBeginEditing:", forControlEvents: UIControlEvents.EditingDidBegin)
        }
    }
}

override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(animated)
    NSNotificationCenter.defaultCenter().removeObserver(self)
}

func keyboardWillShow(notification: NSNotification) { …
Run Code Online (Sandbox Code Playgroud)

nsnotificationcenter ios swift

7
推荐指数
2
解决办法
2150
查看次数

状态恢复崩溃报告(decodeObject?)

我从XCode获取这些崩溃报告(我在底部粘贴了一个),我无法重现错误或弄清楚问题是什么.

从回溯中我认为它可能与这些decodeObject东西有关......我确实遇到了新的decodeBooldecodeDouble函数的问题,所以为了确保我做了一个NSCoder扩展:

func safeDecodeDouble(key: String) -> Double? {
    if self.containsValue(forKey: key) {
        if let value = self.decodeObject(forKey: key) as? Double {
            return value
        }
        return self.decodeDouble(forKey: key)
    }
    return nil
}

func safeDecodeBool(key: String) -> Bool? {
    if self.containsValue(forKey: key) {
        if let value = self.decodeObject(forKey: key) as? Bool {
            return value
        }
        return self.decodeBool(forKey: key)
    }
    return nil
}

func safeDecodeDate(key: String) -> Date? {
    if self.containsValue(forKey: key) {
        if let value = …
Run Code Online (Sandbox Code Playgroud)

nscoding nscoder ios state-restoration swift

7
推荐指数
0
解决办法
382
查看次数

"修正了前导和尾随约束可能导致剪辑"错误?

这里有另一个问题,解决了类似的问题,但在这种情况下,Xcode的行为是正确的,只是烦人.

然而,在我的情况下,我认为它实际上是一个错误:

例

该标签可以有无限数量的行,因此它永远不会被剪裁,文本将会破坏.

它适用于每个本地化:

例题

我希望标签居中,我希望文本距离边距至少20像素,因此我为前导和尾随设置了固定约束.Xcode希望我将其中一个更改为"大于或等于"约束,但在这种情况下,文本将不会完全居中(我尝试过).

我想要的只是中心文本,它不会太靠近边距,但现在我无法在不触发警告的情况下完成.

有想法该怎么解决这个吗?它真的是一个错误,还是我做错了什么?


编辑:这是显示错误的屏幕截图.约束不是直接在视图控制器中,而是在我用作表视图的背景的子视图中.如果我删除这些限制,警告就会消失; 如果我把它们添加回去,它会再次出现.我在一个新项目中试过这个并且无法重现它,我不知道它为什么会在这里发生.

示例3

编辑:

这是另一个例子.当右边约束设置为"大于或等于"时,所有的好:

范例4

一旦我将它设置为"相等",繁荣:

例5

xcode constraints storyboard ios xcode9

7
推荐指数
2
解决办法
7558
查看次数

如何快速使用fetchedresultscontroller重新排序tableview行?

我正在尝试使用核心数据和nsfetchresultscontroller对表视图中的单元格进行重新排序。我发现了使用目标C进行这种操作的几种方法(我一无所知),并尝试快速实现它们,这是我想到的:

var books: Array<AnyObject> = []

// Override to support rearranging the table view.
override func tableView(tableView: UITableView, moveRowAtIndexPath fromIndexPath: NSIndexPath, toIndexPath: NSIndexPath) {

    books = fetchedResultsController.fetchedObjects!

    let book = fetchedResultsController.objectAtIndexPath(fromIndexPath)

    self.fetchedResultsController.delegate = nil

    books.removeAtIndex(fromIndexPath.row)
    books.insert(book, atIndex: toIndexPath.row)

    var i = 0
    for book in books {
        book.setValue(i++, forKey: "position")
    }

    try! context.save()

    self.fetchedResultsController.delegate = self

}
Run Code Online (Sandbox Code Playgroud)

委托和上下文引用位于另一个文件的扩展名中。使用此代码有时可以工作,有时却不行。我更改了顺序,再次运行该应用程序,但顺序却完全不一样,我无法确定。特别是当我一次移动多行时。而且,如果我将每个对象的“位置”属性打印到控制台,我可以看到它们确实没有正确更新。但是为什么不呢?

我究竟做错了什么?有什么更好的选择?

提前致谢,

丹尼尔


编辑:

好的,这是工作代码:

func initializeFetchedResultsController() {
    let request = NSFetchRequest(entityName: "Book")
    let sortDescriptor = NSSortDescriptor(key: "position", ascending: true)
    request.sortDescriptors = …
Run Code Online (Sandbox Code Playgroud)

core-data uitableview nsfetchedresultscontroller ios swift

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

无法验证bitcode(无法识别的参数:-disable-llvm-passes)

显然,TestFlight现在接受Xcode 9版本,因此我尝试为iOS 11 beta版的用户上传我的应用程序的新版本进行测试.

该应用程序已正确上传,但随后我收到一封电子邮件说:

处理您的iOS应用程序时,在应用程序细化过程中发生错误,您的应用程序无法细化.[...]有关可能有助于解决此问题的信息,请参阅技术说明2432.

我检查了链接,它说导出应用程序进行临时部署以重现错误.所以我这样做了,这就是我得到的:

无法在Frameworks/libswiftCore.dylib中验证bitcode:

错误:bitcode 02的clang选项验证失败(无法识别的参数:-disable-llvm-passes)

在日志中,我的应用程序使用的每个框架都会再次出现错误.例如:

code = 0;
description = "Failed to verify bitcode in Realm.framework/Realm:\nerror: Clang option verification failed for bitcode 001 (unrecognized arguments: -disable-llvm-passes)\n\n";
info =             {
};
level = ERROR;
type = "malformed-payload";
Run Code Online (Sandbox Code Playgroud)

许多默认库也是如此,例如libswiftFoundation.dylib,libswiftUIKit.dylib等等.

那我现在该怎么办?

PS:我不想禁用bitcode.


编辑:我也尝试使用Xcode 9进行存档并使用Xcode 8导出.我得到了相同的错误.

xcode ios testflight ios11 xcode9-beta

5
推荐指数
0
解决办法
1302
查看次数

状态还原仅在连接到Xcode时有效

我有一个运行计时器的应用程序,即使该应用程序退出或手机已关闭,计时器也应保持运行。所以我正在尝试使用shouldSaveApplicationStateshouldRestoreApplicationState。我将这两种方法都添加willFinishLaunchingWithOptions到了appDelegate中,并为涉及的每个视图控制器,导航控制器和标签栏控制器设置了恢复ID。然后在视图控制器上,我要还原,我这样做:

override func encodeRestorableStateWithCoder(coder: NSCoder) {
    coder.encodeObject(startDate, forKey: "startDate")
    coder.encodeObject(startTime, forKey: "startTime")
    coder.encodeObject(elapsedTime, forKey: "elapsedTime")
    coder.encodeObject(playing, forKey: "playing")
    coder.encodeObject(timerLabel.text, forKey: "timerLabelText")
    super.encodeRestorableStateWithCoder(coder)
}

override func decodeRestorableStateWithCoder(coder: NSCoder) {
    startDate = coder.decodeObjectForKey("startDate") as! NSDate
    startTime = coder.decodeObjectForKey("startTime") as! NSTimeInterval
    elapsedTime = coder.decodeObjectForKey("elapsedTime") as! NSTimeInterval
    playing = coder.decodeObjectForKey("playing") as! Bool
    timerLabel.text = (coder.decodeObjectForKey("timerLabelText") as! String)
    super.decodeRestorableStateWithCoder(coder)
}

override func applicationFinishedRestoringState() {
    if playing {
        elapsedTime += startDate.timeIntervalSinceNow
        play()
    }
}
Run Code Online (Sandbox Code Playgroud)

现在这是奇怪的部分。当我的手机连接到Xcode时,我使用Xcode的播放和停止按钮启动和退出应用程序,一切正常。但是,当我尝试将手机与Xcode断开连接时,即使我根本没有设置状态恢复,该应用程序也会完全忽略它,只显示第一个视图控制器。而且我什至无法调试,因为当我将手机连接到Xcode时,它可以正常工作。同一件事在模拟器上发生。如果我使用Xcode的按钮,则恢复正常。如果我只是从模拟器本身打开和关闭应用程序,则不会。

有任何想法吗?

xcode ios state-restoration swift

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

领域关系在不应该返回时返回nil

class Book: Object {
    // (…)
    var readingSessions: [ReadingSession] {
        return linkingObjects(ReadingSession.self, forProperty: "book")
    }
}

class ReadingSession: Object {
    // (…)
    var book: Book?

    var aComputedProperty: Int {
        print(self) // Prints ReadingSession { book = Book { (…) } (…) }
        print(self.book) // Prints nil
        // (…)
    }
}
Run Code Online (Sandbox Code Playgroud)

代码几乎说明了一切.如果我self从我的计算属性中打印,它会像我期望的那样在其他属性中打印相关对象.但是,如果我只是尝试获取该对象,它将返回nil.这应该发生吗?难道我做错了什么?

提前致谢,

丹尼尔


编辑:似乎问题实际上与计算属性无关.只是从常规视图控制器调用它给我同样的问题:

let session = ReadingSession()
// (…)
print(session) // This returns every property, including the Book
print(session.book) // This returns nil
Run Code Online (Sandbox Code Playgroud)

但这并不总是发生.在我的代码的某些部分,我做同样的事情,它按预期工作,在其他部分发生这种情况.所以我想我只是在某个地方犯了一些愚蠢的错误,但我不知道是什么原因引起的.


let …
Run Code Online (Sandbox Code Playgroud)

realm swift

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