我刚刚在ios应用中发现了一个与本地范围有关的小不一致行为。
当有座位时,一个人可以注册参加活动。在这种情况下,OnWaitingList
和OnWaitingListAt
不已定义。
如果没有座位,该人可以等候。如果用户接受(单击“确定”),则将OnWaitingList设置为true,将OnWaitingListAt设置为unixtime。在任何一种情况下都保存到同一个DynamoDB表中。
一个人可以注册多个活动。
我发现当一个人第一个进入等待名单(没有剩下的座位)而然后将自己注册到另一个事件(剩下的座位)OnWaitingList为false和OnWaitingListAt是0,类定义中的初始值。然后也会保存这两个值。
participant
变量在if和else语句的括号{}内定义。
我假设范围被绑定到括号中,并且允许我有两个具有相同名称的变量,并且可能具有this文章中所述的不同值。我可能错了,但似乎在这种情况下不应该发生这种异花授粉。
具有不同名称的两个变量将解决此问题。它没有打破流量,但它很烦人,因为我无法弄清楚为什么会发生这种情况。
if (still seats left) {
let participant = self.createParticipant(self.items[indexPath.row])
dynamoDBObjectMapper.save(participant).continueWithExecutor(AWSExecutor.mainThreadExecutor(), withBlock: { (task:AWSTask!) -> AnyObject! in
Register person
return nil
})
} else { // Offer people to sign up on a waiting list.
let alertController = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert)
let waitingListAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Cancel, handler: { (action:UIAlertAction) -> Void in
let participant = self.createParticipant(self.items[indexPath.row])
participant.OnWaitingList = true
participant.OnWaitingListAt = NSDate().timeIntervalSince1970
dynamoDBObjectMapper.save(participant).continueWithExecutor(AWSExecutor.mainThreadExecutor(), withBlock: { (task:AWSTask!) -> AnyObject! in
Register person with OnWaitingList and OnWaitingListAt set
return nil
})
})
}
func createParticipant(item: AggregatedEvents) -> Participants {
let participant = Participants()
participant?.Timestamp = String(item.timestamp!)
participant?.Id = self.fbId
participant?.Date = item.date!
participant?.Event = item.event!
participant?.Location = item.location!
participant?.Name = self.name
participant?.Time = item.time!
return participant!
}
class Participants: AWSDynamoDBObjectModel, AWSDynamoDBModeling {
var Timestamp: NSString? // Partition key.
var Id: NSString? // Sort key.
var Date: NSString? = "28. okt. 1967"
var Event: NSString? = "PT-AMOK Trening"
var Location: NSString? = "Breim"
var Name: NSString? = "Claus Guttesen"
var Time: NSString? = "19:00"
var OnWaitingList: NSNumber? = false
var OnWaitingListAt: NSNumber? = 0.0
}
答案 0 :(得分:0)
为了防止存储这些值,我将它们设置为nil。
if (Still seats left) {
let participant = self.createParticipant(self.items[indexPath.row])
participant.OnWaitingList = nil
participant.OnWaitingListAt = nil
Register and so on
}
在“保存行为选项”的Amazons documentation中,它指出:
适用于iOS的AWS Mobile SDK支持以下保存行为选项:
AWSDynamoDBObjectMapperSaveBehaviorUpdate:不影响保存操作的未建模属性;传递建模属性的nil值将从DynamoDB中的相应项中删除它。默认情况下,Object Mapper使用此行为。
因此,设置这些值更多的是解决方案而不是解决方案。