Làm thế nào chính xác NSInvocation
làm việc? Có một giới thiệu tốt?
Tôi đặc biệt gặp vấn đề khi hiểu cách mã sau (từ Lập trình ca cao cho Mac OS X, Phiên bản thứ 3 ) hoạt động, nhưng sau đó cũng có thể áp dụng các khái niệm độc lập với mẫu hướng dẫn. Mật mã:
- (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];
}
Tôi hiểu những gì nó đang cố gắng làm. (BTW, employees
là một lớp NSArray
tùy chỉnh Person
.)
Là một người .NET, tôi cố gắng liên kết các khái niệm Obj-C và Cacao không quen thuộc với các khái niệm .NET tương tự nhau. Điều này có giống với khái niệm đại biểu của .NET không, nhưng chưa được kiểm tra?
Điều này không rõ ràng 100% từ cuốn sách, vì vậy tôi đang tìm kiếm một cái gì đó bổ sung từ các chuyên gia Cacao / Obj-C thực sự, một lần nữa với mục tiêu tôi hiểu khái niệm cơ bản bên dưới ví dụ đơn giản (-ish). Tôi thực sự mong muốn có thể áp dụng kiến thức một cách độc lập - cho đến chương 9, tôi không gặp khó khăn gì khi làm điều đó. Nhưng bây giờ ...
Cảm ơn trước!
setArgument:atIndex:
, vì vậy việc gán arg thực sự nên đọc[myInvocation setArgument:&myString atIndex:2]
.