#[repr(C)]pub struct NSCoder { /* private fields */ }
NSCoder
only.Expand description
Implementations§
Source§impl NSCoder
impl NSCoder
pub unsafe fn encodeValueOfObjCType_at( &self, type: NonNull<c_char>, addr: NonNull<c_void>, )
pub unsafe fn encodeDataObject(&self, data: &NSData)
NSData
only.pub unsafe fn decodeDataObject(&self) -> Option<Retained<NSData>>
NSData
only.pub unsafe fn decodeValueOfObjCType_at_size( &self, type: NonNull<c_char>, data: NonNull<c_void>, size: NSUInteger, )
pub unsafe fn versionForClassName(&self, class_name: &NSString) -> NSInteger
NSString
only.Source§impl NSCoder
NSExtendedCoder.
impl NSCoder
NSExtendedCoder.
pub unsafe fn encodeObject(&self, object: Option<&AnyObject>)
pub unsafe fn encodeRootObject(&self, root_object: &AnyObject)
pub unsafe fn encodeBycopyObject(&self, an_object: Option<&AnyObject>)
pub unsafe fn encodeByrefObject(&self, an_object: Option<&AnyObject>)
pub unsafe fn encodeConditionalObject(&self, object: Option<&AnyObject>)
pub unsafe fn encodeArrayOfObjCType_count_at( &self, type: NonNull<c_char>, count: NSUInteger, array: NonNull<c_void>, )
pub unsafe fn encodeBytes_length( &self, byteaddr: *const c_void, length: NSUInteger, )
pub unsafe fn decodeObject(&self) -> Option<Retained<AnyObject>>
pub unsafe fn decodeTopLevelObjectAndReturnError( &self, ) -> Result<Retained<AnyObject>, Retained<NSError>>
NSError
only.pub unsafe fn decodeArrayOfObjCType_count_at( &self, item_type: NonNull<c_char>, count: NSUInteger, array: NonNull<c_void>, )
pub unsafe fn decodeBytesWithReturnedLength( &self, lengthp: NonNull<NSUInteger>, ) -> *mut c_void
pub unsafe fn encodePropertyList(&self, a_property_list: &AnyObject)
pub unsafe fn decodePropertyList(&self) -> Option<Retained<AnyObject>>
pub unsafe fn setObjectZone(&self, zone: *mut NSZone)
NSZone
only.pub unsafe fn objectZone(&self) -> *mut NSZone
NSZone
only.pub unsafe fn systemVersion(&self) -> c_uint
pub unsafe fn allowsKeyedCoding(&self) -> bool
pub unsafe fn encodeObject_forKey( &self, object: Option<&AnyObject>, key: &NSString, )
NSString
only.pub unsafe fn encodeConditionalObject_forKey( &self, object: Option<&AnyObject>, key: &NSString, )
NSString
only.pub unsafe fn encodeBool_forKey(&self, value: bool, key: &NSString)
NSString
only.pub unsafe fn encodeInt_forKey(&self, value: c_int, key: &NSString)
NSString
only.pub unsafe fn encodeInt32_forKey(&self, value: i32, key: &NSString)
NSString
only.pub unsafe fn encodeInt64_forKey(&self, value: i64, key: &NSString)
NSString
only.pub unsafe fn encodeFloat_forKey(&self, value: c_float, key: &NSString)
NSString
only.pub unsafe fn encodeDouble_forKey(&self, value: c_double, key: &NSString)
NSString
only.pub unsafe fn encodeBytes_length_forKey( &self, bytes: *const u8, length: NSUInteger, key: &NSString, )
NSString
only.pub unsafe fn containsValueForKey(&self, key: &NSString) -> bool
NSString
only.pub unsafe fn decodeObjectForKey( &self, key: &NSString, ) -> Option<Retained<AnyObject>>
NSString
only.pub unsafe fn decodeTopLevelObjectForKey_error( &self, key: &NSString, ) -> Result<Retained<AnyObject>, Retained<NSError>>
NSError
and NSString
only.pub unsafe fn decodeBoolForKey(&self, key: &NSString) -> bool
NSString
only.pub unsafe fn decodeIntForKey(&self, key: &NSString) -> c_int
NSString
only.pub unsafe fn decodeInt32ForKey(&self, key: &NSString) -> i32
NSString
only.pub unsafe fn decodeInt64ForKey(&self, key: &NSString) -> i64
NSString
only.pub unsafe fn decodeFloatForKey(&self, key: &NSString) -> c_float
NSString
only.pub unsafe fn decodeDoubleForKey(&self, key: &NSString) -> c_double
NSString
only.pub unsafe fn decodeBytesForKey_returnedLength( &self, key: &NSString, lengthp: *mut NSUInteger, ) -> *const u8
NSString
only.Sourcepub unsafe fn decodeBytesWithMinimumLength(
&self,
length: NSUInteger,
) -> *mut c_void
pub unsafe fn decodeBytesWithMinimumLength( &self, length: NSUInteger, ) -> *mut c_void
Decode bytes from the decoder. The length of the bytes must be greater than or equal to the length
parameter.
If the result exists, but is of insufficient length, then the decoder uses failWithError
to fail the entire decode operation. The result of that is configurable on a per-NSCoder basis using NSDecodingFailurePolicy
.
Sourcepub unsafe fn decodeBytesForKey_minimumLength(
&self,
key: &NSString,
length: NSUInteger,
) -> *const u8
Available on crate feature NSString
only.
pub unsafe fn decodeBytesForKey_minimumLength( &self, key: &NSString, length: NSUInteger, ) -> *const u8
NSString
only.Decode bytes from the decoder for a given key. The length of the bytes must be greater than or equal to the length
parameter.
If the result exists, but is of insufficient length, then the decoder uses failWithError
to fail the entire decode operation. The result of that is configurable on a per-NSCoder basis using NSDecodingFailurePolicy
.
pub unsafe fn encodeInteger_forKey(&self, value: NSInteger, key: &NSString)
NSString
only.pub unsafe fn decodeIntegerForKey(&self, key: &NSString) -> NSInteger
NSString
only.pub unsafe fn requiresSecureCoding(&self) -> bool
pub unsafe fn decodeObjectOfClass_forKey( &self, a_class: &AnyClass, key: &NSString, ) -> Option<Retained<AnyObject>>
NSString
only.pub unsafe fn decodeTopLevelObjectOfClass_forKey_error( &self, a_class: &AnyClass, key: &NSString, ) -> Result<Retained<AnyObject>, Retained<NSError>>
NSError
and NSString
only.Sourcepub unsafe fn decodeArrayOfObjectsOfClass_forKey(
&self,
cls: &AnyClass,
key: &NSString,
) -> Option<Retained<NSArray>>
Available on crate features NSArray
and NSString
only.
pub unsafe fn decodeArrayOfObjectsOfClass_forKey( &self, cls: &AnyClass, key: &NSString, ) -> Option<Retained<NSArray>>
NSArray
and NSString
only.Decodes the
NSArray
object for the given
key,
which should be an
NSArray<cls>,
containing the given non-collection class (no nested arrays or arrays of dictionaries, etc) from the coder.
Requires
NSSecureCoding
otherwise an exception is thrown and sets the
decodingFailurePolicy
to
NSDecodingFailurePolicySetErrorAndReturn.
Returns
nil
if the object for
key
is not of the expected types, or cannot be decoded, and sets the
error
on the decoder.
Sourcepub unsafe fn decodeDictionaryWithKeysOfClass_objectsOfClass_forKey(
&self,
key_cls: &AnyClass,
object_cls: &AnyClass,
key: &NSString,
) -> Option<Retained<NSDictionary>>
Available on crate features NSDictionary
and NSString
only.
pub unsafe fn decodeDictionaryWithKeysOfClass_objectsOfClass_forKey( &self, key_cls: &AnyClass, object_cls: &AnyClass, key: &NSString, ) -> Option<Retained<NSDictionary>>
NSDictionary
and NSString
only.Decodes the
NSDictionary
object for the given
key,
which should be an
NSDictionary<keyCls,objectCls>
, with keys of type given in
keyCls
and objects of the given non-collection class
objectCls
(no nested dictionaries or other dictionaries contained in the dictionary, etc) from the coder.
Requires
NSSecureCoding
otherwise an exception is thrown and sets the
decodingFailurePolicy
to
NSDecodingFailurePolicySetErrorAndReturn.
Returns
nil
if the object for
key
is not of the expected types, or cannot be decoded, and sets the
error
on the decoder.
pub unsafe fn decodeObjectOfClasses_forKey( &self, classes: Option<&NSSet<AnyClass>>, key: &NSString, ) -> Option<Retained<AnyObject>>
NSSet
and NSString
only.pub unsafe fn decodeTopLevelObjectOfClasses_forKey_error( &self, classes: Option<&NSSet<AnyClass>>, key: &NSString, ) -> Result<Retained<AnyObject>, Retained<NSError>>
NSError
and NSSet
and NSString
only.Sourcepub unsafe fn decodeArrayOfObjectsOfClasses_forKey(
&self,
classes: &NSSet<AnyClass>,
key: &NSString,
) -> Option<Retained<NSArray>>
Available on crate features NSArray
and NSSet
and NSString
only.
pub unsafe fn decodeArrayOfObjectsOfClasses_forKey( &self, classes: &NSSet<AnyClass>, key: &NSString, ) -> Option<Retained<NSArray>>
NSArray
and NSSet
and NSString
only.Decodes the
NSArray
object for the given
key,
which should be an
NSArray,
containing the given non-collection classes (no nested arrays or arrays of dictionaries, etc) from the coder.
Requires
NSSecureCoding
otherwise an exception is thrown and sets the
decodingFailurePolicy
to
NSDecodingFailurePolicySetErrorAndReturn.
Returns
nil
if the object for
key
is not of the expected types, or cannot be decoded, and sets the
error
on the decoder.
Sourcepub unsafe fn decodeDictionaryWithKeysOfClasses_objectsOfClasses_forKey(
&self,
key_classes: &NSSet<AnyClass>,
object_classes: &NSSet<AnyClass>,
key: &NSString,
) -> Option<Retained<NSDictionary>>
Available on crate features NSDictionary
and NSSet
and NSString
only.
pub unsafe fn decodeDictionaryWithKeysOfClasses_objectsOfClasses_forKey( &self, key_classes: &NSSet<AnyClass>, object_classes: &NSSet<AnyClass>, key: &NSString, ) -> Option<Retained<NSDictionary>>
NSDictionary
and NSSet
and NSString
only.Decodes the
NSDictionary
object for the given
key,
which should be an
NSDictionary,
with keys of the types given in
keyClasses
and objects of the given non-collection classes in
objectClasses
(no nested dictionaries or other dictionaries contained in the dictionary, etc) from the given coder.
Requires
NSSecureCoding
otherwise an exception is thrown and sets the
decodingFailurePolicy
to
NSDecodingFailurePolicySetErrorAndReturn.
Returns
nil
if the object for
key
is not of the expected types, or cannot be decoded, and sets the
error
on the decoder.
pub unsafe fn decodePropertyListForKey( &self, key: &NSString, ) -> Option<Retained<AnyObject>>
NSString
only.pub unsafe fn allowedClasses(&self) -> Option<Retained<NSSet<AnyClass>>>
NSSet
only.Sourcepub unsafe fn failWithError(&self, error: &NSError)
Available on crate feature NSError
only.
pub unsafe fn failWithError(&self, error: &NSError)
NSError
only.Signals to this coder that the decode has failed. Parameter non-nil error that describes the reason why the decode failed
Sets an error on this NSCoder once per TopLevel decode; calling it repeatedly will have no effect until the call stack unwinds to one of the TopLevel decode entry-points.
This method is only meaningful to call for decodes.
Typically, you would want to call this method in your -initWithCoder: implementation when you detect situations like:
- lack of secure coding
- corruption of your data
- domain validation failures
After calling -failWithError: within your -initWithCoder: implementation, you should clean up and return nil as early as possible.
Once an error has been signaled to a decoder, it remains set until it has handed off to the first TopLevel decode invocation above it. For example, consider the following call graph: A -decodeTopLevelObjectForKey:error: B -initWithCoder: C -decodeObjectForKey: D -initWithCoder: E -decodeObjectForKey: F -failWithError:
In this case the error provided in stack-frame F will be returned via the outError in stack-frame A. Furthermore the result object from decodeTopLevelObjectForKey:error: will be nil, regardless of the result of stack-frame B.
NSCoder implementations support two mechanisms for the stack-unwinding from F to A:
- forced (NSException based)
- particpatory (error based)
The kind of unwinding you get is determined by the decodingFailurePolicy property of this NSCoder (which defaults to NSDecodingFailurePolicyRaiseException to match historical behavior).
Sourcepub unsafe fn decodingFailurePolicy(&self) -> NSDecodingFailurePolicy
pub unsafe fn decodingFailurePolicy(&self) -> NSDecodingFailurePolicy
Defines the behavior this NSCoder should take on decode failure (i.e. corrupt archive, invalid data, etc.).
The default result of this property is NSDecodingFailurePolicyRaiseException, subclasses can change this to an alternative policy.
Sourcepub unsafe fn error(&self) -> Option<Retained<NSError>>
Available on crate feature NSError
only.
pub unsafe fn error(&self) -> Option<Retained<NSError>>
NSError
only.The current error (if there is one) for the current TopLevel decode.
The meaning of this property changes based on the result of the decodingFailurePolicy property: For NSDecodingFailurePolicyRaiseException, this property will always be nil. For NSDecodingFailurePolicySetErrorAndReturn, this property can be non-nil, and if so, indicates that there was a failure while decoding the archive (specifically its the very first error encountered).
While .error is non-nil, all attempts to decode data from this coder will return a nil/zero-equivalent value.
This error is consumed by a TopLevel decode API (which resets this coder back to a being able to potentially decode data).
Source§impl NSCoder
NSTypedstreamCompatibility.
impl NSCoder
NSTypedstreamCompatibility.
pub unsafe fn encodeNXObject(&self, object: &AnyObject)
pub unsafe fn decodeNXObject(&self) -> Option<Retained<AnyObject>>
Source§impl NSCoder
NSGeometryCoding.
impl NSCoder
NSGeometryCoding.
pub unsafe fn encodePoint(&self, point: NSPoint)
NSGeometry
and objc2-core-foundation
only.pub unsafe fn decodePoint(&self) -> NSPoint
NSGeometry
and objc2-core-foundation
only.pub unsafe fn encodeSize(&self, size: NSSize)
NSGeometry
and objc2-core-foundation
only.pub unsafe fn decodeSize(&self) -> NSSize
NSGeometry
and objc2-core-foundation
only.pub unsafe fn encodeRect(&self, rect: NSRect)
NSGeometry
and objc2-core-foundation
only.pub unsafe fn decodeRect(&self) -> NSRect
NSGeometry
and objc2-core-foundation
only.Source§impl NSCoder
NSGeometryKeyedCoding.
impl NSCoder
NSGeometryKeyedCoding.
pub unsafe fn encodePoint_forKey(&self, point: NSPoint, key: &NSString)
NSGeometry
and NSString
and objc2-core-foundation
only.pub unsafe fn encodeSize_forKey(&self, size: NSSize, key: &NSString)
NSGeometry
and NSString
and objc2-core-foundation
only.pub unsafe fn encodeRect_forKey(&self, rect: NSRect, key: &NSString)
NSGeometry
and NSString
and objc2-core-foundation
only.pub unsafe fn decodePointForKey(&self, key: &NSString) -> NSPoint
NSGeometry
and NSString
and objc2-core-foundation
only.pub unsafe fn decodeSizeForKey(&self, key: &NSString) -> NSSize
NSGeometry
and NSString
and objc2-core-foundation
only.pub unsafe fn decodeRectForKey(&self, key: &NSString) -> NSRect
NSGeometry
and NSString
and objc2-core-foundation
only.Methods from Deref<Target = NSObject>§
Sourcepub fn doesNotRecognizeSelector(&self, sel: Sel) -> !
pub fn doesNotRecognizeSelector(&self, sel: Sel) -> !
Handle messages the object doesn’t recognize.
See Apple’s documentation for details.
Methods from Deref<Target = AnyObject>§
Sourcepub fn class(&self) -> &'static AnyClass
pub fn class(&self) -> &'static AnyClass
Dynamically find the class of this object.
§Panics
May panic if the object is invalid (which may be the case for objects
returned from unavailable init
/new
methods).
§Example
Check that an instance of NSObject
has the precise class NSObject
.
use objc2::ClassType;
use objc2::runtime::NSObject;
let obj = NSObject::new();
assert_eq!(obj.class(), NSObject::class());
Sourcepub unsafe fn get_ivar<T>(&self, name: &str) -> &Twhere
T: Encode,
👎Deprecated: this is difficult to use correctly, use Ivar::load
instead.
pub unsafe fn get_ivar<T>(&self, name: &str) -> &Twhere
T: Encode,
Ivar::load
instead.Use Ivar::load
instead.
§Safety
The object must have an instance variable with the given name, and it
must be of type T
.
See Ivar::load_ptr
for details surrounding this.
Sourcepub fn downcast_ref<T>(&self) -> Option<&T>where
T: DowncastTarget,
pub fn downcast_ref<T>(&self) -> Option<&T>where
T: DowncastTarget,
Attempt to downcast the object to a class of type T
.
This is the reference-variant. Use Retained::downcast
if you want
to convert a retained object to another type.
§Mutable classes
Some classes have immutable and mutable variants, such as NSString
and NSMutableString
.
When some Objective-C API signature says it gives you an immutable class, it generally expects you to not mutate that, even though it may technically be mutable “under the hood”.
So using this method to convert a NSString
to a NSMutableString
,
while not unsound, is generally frowned upon unless you created the
string yourself, or the API explicitly documents the string to be
mutable.
See Apple’s documentation on mutability and on
isKindOfClass:
for more details.
§Generic classes
Objective-C generics are called “lightweight generics”, and that’s because they aren’t exposed in the runtime. This makes it impossible to safely downcast to generic collections, so this is disallowed by this method.
You can, however, safely downcast to generic collections where all the
type-parameters are AnyObject
.
§Panics
This works internally by calling isKindOfClass:
. That means that the
object must have the instance method of that name, and an exception
will be thrown (if CoreFoundation is linked) or the process will abort
if that is not the case. In the vast majority of cases, you don’t need
to worry about this, since both root objects NSObject
and
NSProxy
implement this method.
§Examples
Cast an NSString
back and forth from NSObject
.
use objc2::rc::Retained;
use objc2_foundation::{NSObject, NSString};
let obj: Retained<NSObject> = NSString::new().into_super();
let string = obj.downcast_ref::<NSString>().unwrap();
// Or with `downcast`, if we do not need the object afterwards
let string = obj.downcast::<NSString>().unwrap();
Try (and fail) to cast an NSObject
to an NSString
.
use objc2_foundation::{NSObject, NSString};
let obj = NSObject::new();
assert!(obj.downcast_ref::<NSString>().is_none());
Try to cast to an array of strings.
use objc2_foundation::{NSArray, NSObject, NSString};
let arr = NSArray::from_retained_slice(&[NSObject::new()]);
// This is invalid and doesn't type check.
let arr = arr.downcast_ref::<NSArray<NSString>>();
This fails to compile, since it would require enumerating over the array to ensure that each element is of the desired type, which is a performance pitfall.
Downcast when processing each element instead.
use objc2_foundation::{NSArray, NSObject, NSString};
let arr = NSArray::from_retained_slice(&[NSObject::new()]);
for elem in arr {
if let Some(data) = elem.downcast_ref::<NSString>() {
// handle `data`
}
}
Trait Implementations§
Source§impl AsRef<NSCoder> for NSArchiver
Available on crate feature NSArchiver
only.
impl AsRef<NSCoder> for NSArchiver
NSArchiver
only.Source§impl AsRef<NSCoder> for NSKeyedArchiver
Available on crate feature NSKeyedArchiver
only.
impl AsRef<NSCoder> for NSKeyedArchiver
NSKeyedArchiver
only.Source§impl AsRef<NSCoder> for NSKeyedUnarchiver
Available on crate feature NSKeyedArchiver
only.
impl AsRef<NSCoder> for NSKeyedUnarchiver
NSKeyedArchiver
only.Source§impl AsRef<NSCoder> for NSPortCoder
Available on crate feature NSPortCoder
only.
impl AsRef<NSCoder> for NSPortCoder
NSPortCoder
only.Source§impl AsRef<NSCoder> for NSUnarchiver
Available on crate feature NSArchiver
only.
impl AsRef<NSCoder> for NSUnarchiver
NSArchiver
only.Source§impl AsRef<NSCoder> for NSXPCCoder
Available on crate feature NSXPCConnection
only.
impl AsRef<NSCoder> for NSXPCCoder
NSXPCConnection
only.Source§impl Borrow<NSCoder> for NSArchiver
Available on crate feature NSArchiver
only.
impl Borrow<NSCoder> for NSArchiver
NSArchiver
only.Source§impl Borrow<NSCoder> for NSKeyedArchiver
Available on crate feature NSKeyedArchiver
only.
impl Borrow<NSCoder> for NSKeyedArchiver
NSKeyedArchiver
only.Source§impl Borrow<NSCoder> for NSKeyedUnarchiver
Available on crate feature NSKeyedArchiver
only.
impl Borrow<NSCoder> for NSKeyedUnarchiver
NSKeyedArchiver
only.Source§impl Borrow<NSCoder> for NSPortCoder
Available on crate feature NSPortCoder
only.
impl Borrow<NSCoder> for NSPortCoder
NSPortCoder
only.Source§impl Borrow<NSCoder> for NSUnarchiver
Available on crate feature NSArchiver
only.
impl Borrow<NSCoder> for NSUnarchiver
NSArchiver
only.Source§impl Borrow<NSCoder> for NSXPCCoder
Available on crate feature NSXPCConnection
only.
impl Borrow<NSCoder> for NSXPCCoder
NSXPCConnection
only.Source§impl ClassType for NSCoder
impl ClassType for NSCoder
Source§const NAME: &'static str = "NSCoder"
const NAME: &'static str = "NSCoder"
Source§type ThreadKind = <<NSCoder as ClassType>::Super as ClassType>::ThreadKind
type ThreadKind = <<NSCoder as ClassType>::Super as ClassType>::ThreadKind
Source§impl NSObjectProtocol for NSCoder
impl NSObjectProtocol for NSCoder
Source§fn isEqual(&self, other: Option<&AnyObject>) -> bool
fn isEqual(&self, other: Option<&AnyObject>) -> bool
Source§fn hash(&self) -> usize
fn hash(&self) -> usize
Source§fn isKindOfClass(&self, cls: &AnyClass) -> bool
fn isKindOfClass(&self, cls: &AnyClass) -> bool
Source§fn is_kind_of<T>(&self) -> bool
fn is_kind_of<T>(&self) -> bool
isKindOfClass
directly, or cast your objects with AnyObject::downcast_ref