我有一个应用程序阻止用户访问视图控制器的几行。这是通过检查bool类型的变量是设置为true还是false来完成的。
var unlocked: bool = false
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell") as UITableViewCell!
//blocking cells if they are not paid for.
if unlocked == false {
if ( indexPath.row >= 2 ) {
cell.userInteractionEnabled = false
cell.contentView.alpha = 0.5
}
else{
cell.userInteractionEnabled = true
cell.contentView.alpha = 1
}
}
return cell
}
这完美无缺。然后,我可以选择让用户购买剩余行的访问权限,从而购买应用程序的剩余内容。一旦购买了应用内购买,它将运行功能" updateSections()"。我知道这个功能是在购买时调用的,因为我已经测试过了。
我现在想要允许用户从" updatedSections()"中访问表视图中的其余行。功能,因为他们将支付它。
我所尝试的是:
//function to unlock
func unlockSections() {
//This is the code for what happens once the device has bought the IAP. going to have to save what happens here in using nsuserdefaults to make sure it will work when the app opens and closes.
print("The IAP worked")
let unlocked = true
tableview.reloadData()
}
然而,这似乎不起作用。我无法看到自己哪里出错了。
答案 0 :(得分:1)
问题是这一行:
let unlocked = true
定义了一个名为unlocked
的新常量,该常量仅存在于unlockSections
方法的范围内。它与名为unlocked
的属性完全分开,该属性在类的开头定义。要更新属性而不是创建新常量,只需删除“let”:
unlocked = true
或者如果你想要清楚(或者你想要两者都有,但在特定情况下使用该属性),请使用“self”。强调你打算使用该财产:
self.unlocked = true