Foundation framework examples¶
This part of the documentation covers examples of using classes from the Foundation framework.
NSArray example¶
Here is an example of using the NSArray class:
from pyobjus import autoclass
NSString = autoclass('NSString')
NSArray = autoclass("NSArray")
string_for_array = NSString.alloc().initWithUTF8String_("some text for NSArray")
array = NSArray.arrayWithObject_(string_for_array)
returnedObject = array.objectAtIndex_(0)
value = returnedObject.UTF8String()
contain_object = array.containsObject_(string_for_array)
returnedNSStringObject = array.objectAtIndex_(0)
value = returnedNSStringObject.UTF8String()
print "string value of returned object -->", value
print "return value of containsObject method -->", contain_object
This will output:
>>> string value of returned object --> some text for NSArray
>>> return value of containsObject method --> True
NSArray with pyobjus literals¶
If you want, you can use something like an Objective C literal to create an NSArray:
from pyobjus import objc_arr, objc_str
array = objc_arr(objc_str('some string'), objc_str('some other string'))
print array
As you can see here, objc_arr(...)
is equivalent to
autoclass('NSArray').arrayWithObjects_(...)
, and will output:
>>> <__main__.__NSArrayI object at 0x10a22d350>
NSDictionary example¶
Here is an example of using a NSDictionary class:
from pyobjus import autoclass
NSString = autoclass('NSString')
NSArray = autoclass("NSArray")
NSDictionary = autoclass("NSDictionary")
string_object = NSString.stringWithUTF8String_("some text for NSDictionary")
string_key = NSString.stringWithUTF8String_("someKey")
array_object = NSArray.arrayWithObject_(string_object)
array_key = NSArray.arrayWithObject_(string_key)
# we are passing array with objects and keys
dictionary = NSDictionary.dictionaryWithObjects_forKeys_(array_object, array_key)
returned_nsstring = dictionary.objectForKey_(array_key.objectAtIndex_(0))
str_value = returned_nsstring.UTF8String()
print str_value
This will output:
>>> some text for NSDictionary
NSDictionary with pyobjus literals¶
We can also use pyobjus literals with the NSDictionary class.
So let’s add two elements to the dictionary. The first one has the key ‘first_key’ and the value @’string value of first key’, and the second one has the key ‘second_key’ with the value NSArray:
from pyobjus import objc_dict, objc_str, objc_arr
dictionary = objc_dict({
'first_key': objc_str('string value of first key'),
'second_key': objc_arr(objc_str('string element of NSArray'))
})
first_key_value = dictionary.objectForKey_(objc_str('first_key'))
second_key_value = dictionary.objectForKey_(objc_str('second_key'))
print first_key_value
print second_key_value
This will output:
>>> <__main__.__NSCFString object at 0x101025d10>
>>> <__main__.__NSArrayI object at 0x101169290>
So, say you want to call the UTF8String method of the NSString object that resides in the ‘first_key’, you can simply call:
str_val = first_key_value.UTF8String()
print 'String value is: {0}'.format(str_val)
This will output:
>>> String value is: string value of first key
NSMutableArray example¶
This class is often useful if you need to add elements after you have created an array. So let’s look at an example of using this class with pyobjus:
from pyobjus import autoclass
NSString = autoclass('NSString')
NSMutableArray = autoclass("NSMutableArray")
array = NSMutableArray.arrayWithCapacity_(5)
text_val_one = NSString.alloc().initWithUTF8String_("some text for NSMutableArray")
text_val_two = NSString.alloc().initWithUTF8String_("some other text for NSMutableArray")
# we add some objects to NSMutableArray
array.addObject_(text_val_one)
array.addObject_(text_val_one)
array.addObject_(text_val_two)
count = array.count()
print "count of array before object delete -->", count
# then we remove some of them
array.removeObjectAtIndex_(0)
array.removeObject_(text_val_two)
count = array.count()
print "count of array after object delete -->", count
returnedObject = array.objectAtIndex_(0)
value = returnedObject.UTF8String()
print "string value of returned object -->", value
# call method which accepts multiple arguments
array.insertObject_atIndex_(text_val_two, 1)
returnedObject = array.objectAtIndex_(1)
value = returnedObject.UTF8String()
print "string value of returned object at index 1 -->", value
This will output:
>>> number of array before object delete --> 3
>>> number of array after object delete --> 1
>>> string value of returned object --> some text for NSMutableArray
>>> string value of returned object at index 1 --> some other text for NSMutableArray
NSMutableDictionary example¶
As with the class above, you can also add and delete elements from the NSMutableDictionary after you’ve created it.:
from pyobjus import autoclass
NSString = autoclass('NSString')
NSMutableDictionary = autoclass("NSMutableDictionary")
# notice that you can instead of this line use objc_str('some text for NSDictoinary')
string_object = NSString.stringWithUTF8String_("some text for NSDictionary")
string_key = NSString.stringWithUTF8String_("someKey")
string_object_second = NSString.stringWithUTF8String_("some other text for NSDictionary")
string_key_second = NSString.stringWithUTF8String_("someOtherKey")
objects_dict = {
string_key: string_object,
string_key_second: string_object_second
}
mutable_dictionary = NSMutableDictionary.dictionaryWithCapacity_(10)
# we can add objects to dict now
for key in objects_dict:
mutable_dictionary.setObject_forKey_(objects_dict[key], key)
# let's return some object
returned_nsstring = mutable_dictionary.objectForKey_(string_key)
# we can iterate over dict values
enumerator = mutable_dictionary.objectEnumerator()
obj = enumerator.nextObject()
while obj:
str_value = obj.UTF8String()
print str_value
obj = enumerator.nextObject()
So this will output:
>>> some other text for NSDictionary
>>> some text for NSDictionary