Bagaimana tepatnya cara NSInvocation
kerjanya? Apakah ada pengantar yang bagus?
Saya secara khusus mengalami masalah memahami bagaimana kode berikut (dari Pemrograman Kakao untuk Mac OS X, Edisi ke-3 ) bekerja, tetapi kemudian juga dapat menerapkan konsep-konsep secara independen dari sampel tutorial. Kode:
- (void)insertObject:(Person *)p inEmployeesAtIndex:(int)index
{
NSLog(@"adding %@ to %@", p, employees);
// Add inverse of this operation to undo stack
NSUndoManager *undo = [self undoManager];
[[undo prepareWithInvocationTarget:self] removeObjectFromEmployeesAtIndex:index];
if (![undo isUndoing])
[undo setActionName:@"Insert Person"];
// Finally, add person to the array
[employees insertObject:p atIndex:index];
}
- (void)removeObjectFromEmployeesAtIndex:(int)index
{
Person *p = [employees objectAtIndex:index];
NSLog(@"removing %@ from %@", p, employees);
// Add inverse of this operation to undo stack
NSUndoManager *undo = [self undoManager];
[[undo prepareWithInvocationTarget:self] insertObject:p
inEmployeesAtIndex:index];
if (![undo isUndoing])
[undo setActionName:@"Delete Person"];
// Finally, remove person from array
[employees removeObjectAtIndex:index];
}
Saya mendapatkan apa yang ingin dilakukan. (BTW, employees
adalah kelas NSArray
khusus Person
.)
Menjadi seorang. NET guy, saya mencoba mengaitkan konsep Obj-C dan Cocoa yang tidak dikenal dengan konsep .NET. Apakah ini mirip dengan konsep delegasi .NET, tetapi tidak diketik?
Ini tidak 100% jelas dari buku ini, jadi saya mencari sesuatu tambahan dari pakar Kakao / Obj-C yang asli, lagi-lagi dengan tujuan agar saya memahami konsep dasar di bawah contoh sederhana (-ish). Saya benar-benar ingin dapat mengaplikasikan pengetahuan secara mandiri - sampai bab 9, saya tidak mengalami kesulitan melakukan itu. Tapi sekarang ...
Terima kasih sebelumnya!
setArgument:atIndex:
, sehingga tugas arg harus benar-benar membaca[myInvocation setArgument:&myString atIndex:2]
.