You have two problems in that code. First of all, you assume that having a didyouknow-id in the URL, is enough for Drupal to know where to get your object, the second problem is that your page argument is off.
This simplified code:
$items['admin/structure/didyouknow/manage/%didyouknow/edit'] = array(
// …
'page arguments' => array(1),
);
will pass on "structure" as an argument, not the %didyouknow id, nor not a didyouknow-object, which is why you get an error about a "non-object". Argument indexing start with 0 => admin, so as(as already mentioned by LToomre,) you need to have:
'page arguments' => array(4),
but itIt is also important to note that Drupal will not automatically know how to load your entity, you are required to provide the load function yourself.
As an example, look at the epay module, which has a menu hook like this:
$items['payment/epay/callback/%epay_hash'] = array();
The named argument %epay_hash, is automatically mapped to a _load function:
function epay_hash_load($hash) {}
which takes the URL argument as paramterparameter, performs the DB queries necessary to load your object, and then returns it.