1

次のコードを使用して「カスタムボタン」をNSUserdefaultsに保存していますが、オブジェクトをNSdataに変換しているときに、「[UIImage encodeWithCoder:]:認識されないセレクターがインスタンスに送信されました」というエラーが発生します。ここで「カスタムボタン」はUIButtonクラスです。 。誰もが理由を知っています...?私を助けてください。

 Custom_button *lock11 = (Custom_button*)[menu1 viewWithTag:100];
                 NSLog(@"opened lock1 ========= %@",lock11);
                 lock11.is_menu_lock_opened = YES; 

                 NSData *myEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:lock11]; //[NSKeyedArchiver archivedDataWithRootObject:lock11];
                 [prefs setObject:myEncodedObject forKey:@"set1lock"];
4

3 に答える 3

3

NSUserDefaults クラスは、float、double、integer、Boolean、URL などの一般的な型にアクセスするための便利なメソッドを提供します。デフォルト オブジェクトは、プロパティ リスト、つまり、NSData、NSString、NSNumber、NSDate、NSArray、または NSDictionary のインスタンス (またはコレクションの場合はインスタンスの組み合わせ) である必要があります。他のタイプのオブジェクトを保存する場合は、通常、アーカイブして NSData のインスタンスを作成する必要があります。

プロパティ リスト オブジェクトに直接マップされないオブジェクトはNSData、コーダーが送信され、その内容がエンコードされることによって変換されます。[UIImage encodeWithCoder:]. NSCodingこれが機能するには、プロトコルに準拠する必要があります。iOS 5 より前の NSCoding プロトコルに準拠していないことがわかりUIImageます。iOS 5 より前にデプロイする場合は、Custom Button クラスに NSCoding を実装し、そのイメージを別の方法で保存することによって、自分で何かを解決する必要があります。

于 2012-04-19T12:00:45.527 に答える
2

このメソッドを Custom_button クラスに実装します

すべてのオブジェクトのinitWithCoderおよびencodeWithCoder

-(id) initWithCoder: (NSCoder *)coder {

       self = [[CastInnerListData alloc] init];
       if (self != nil) {       
           self.object1 = [coder decodeObjectForKey:@"object1"];
           self.object2 = [coder decodeObjectForKey:@"object2"];    
    }
    return self;
}

-(void) encodeWithCoder: (NSCoder *)coder{

      [coder encodeObject:object1 forKey:@"object1"];
      [coder encodeObject:object2 forKey:@"object2"];
}

詳細については、ここをクリックしてください

于 2012-04-19T12:07:46.667 に答える
1

少し検索すれば、すぐに答えが得られます。

UIImage encodeWithCoder urecognisedセレクター?

于 2012-04-19T11:54:43.557 に答える