Think of Delegates as an intimate one-to-one relationship. You are communicating a vital piece of information back to a single point and the information must not get lost. As an example you might have a stepper in the tableViewCell so the user taps the stepper and orders 3 Gin Tonics, the buy button in the tableViewCell calls a Delegate method in the ViewController to order 3 Gin Tonics. Think of this as information sent reliably that mustn't get lost.
A Notification is a broadcast, you stand at the top of the bar and shout your order at all the bartenders. Probably not what you want as you could end up with a couple more GTs than you were hoping for.
Think of Notifications as passing a small piece of info and it doesn't matter if it gets lost (It's not going to get lost but think of it that way). So in your case, the shopping cart singleton should be sending Notifications that there are now 3 GTs in the shopping basket. Then if you have coach marks in your UI they can listen to the notifications and update their coach marks. As you can see here, not the end of the world if a Notification would get lost.
You do have another options as well. Key Value Observing. Your coach marks could subscribe to an Integer property in your shopping cart singleton and they would get notified when this is updated. I wouldn't suggest it in this case but I'm just putting it out there as another option.