How to fix "ClientRpc call on un-spawned object" error, using UNET

So, I’m working on a multiplayer fps game using the new UNET system, and I’m having issues doing RPC calls. Here is my C# script attached to the player camera:

using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
public class soldierHandling : NetworkBehaviour {
	RaycastHit hit;	
	[ServerCallback]
	void Update () {
		CheckLookingAt();
		if(!isLocalPlayer){

			if(Input.GetKeyUp(KeyCode.E)){
				RpcPutObjectInHand(hit.transform.gameObject);
			}
		}
	}
	[ClientRpc]
	public void RpcPutObjectInHand (GameObject objectToPickUp){
		Debug.Log("attempting to pick up : " + objectToPickUp);
		if(hit.transform.tag == "equipable"){
			objectToPickUp.transform.SetParent(this.transform.FindChild("holdPoint"));
			objectToPickUp.transform.position = this.transform.FindChild("holdPoint").transform.position;
			objectToPickUp.transform.rotation = this.transform.FindChild("holdPoint").transform.rotation;
			objectToPickUp.GetComponent<Rigidbody>().detectCollisions=false;
			objectToPickUp.GetComponent<Rigidbody>().isKinematic=true;
			objectToPickUp.GetComponent<Rigidbody>().useGravity=false;
			//objectToPickUp
			Debug.Log("picked up : " + objectToPickUp);
		}
	}
	
	void CheckLookingAt(){
		Vector3 fwd = transform.TransformDirection(Vector3.forward);
		if(Physics.Raycast(transform.position,fwd,out hit, 5)){
			//Debug.Log("looking at: " + hit.transform);
		}
	}
}

Basically, the script checks what the player is looking at, when E is pressed if the object is equipable, its physics are deactivated, and it’s put in the player’s hand. (Yes, I intend to cache etc. this isn’t the finished product)

It works great on the server without the [ClientRpc] tag but obviously, doesn’t call the function on the clients. With the [ClientRpc] tag, the function never gets called and I get the following warning:

ClientRpc call on un-spawned object
UnityEngine.Networking.NetworkBehaviour:SendRPCInternal(NetworkWriter,
Int32, String)
soldierHandling:CallRpcPutObjectInHand(GameObject)
soldierHandling:Update() (at
Assets/scripts/soldierHandling.cs:15)

I’m confused as the player and weapon are clearly spawned objects. Any help on the issue would be great!

Make sure you actually do a NetworkServer.Spawn after instantiating the objects:
http://docs.unity3d.com/Manual/UNetSpawning.html

That article explains the difference between instantiating and networkspawning objects. Maybe that helps you.
Also the Objects need to be in the list of spawnable prefabs and have a networkidentity component.

I guess your Object not spawned by NetworkServer.Spawn or NetworkServer.AddPlayerForConnection.
Please following the UNET Spawning like Torigas mentioned above