tôi cần phải tạo ra trong một ứng dụng iOS giả va_list
để vượt qua một chức năng NSString initWithFormat:arguments:
, đây là mã của tôi:giả va_list trong ARC
NSArray *fixedArguments = [[NSArray alloc] initWithArray:arguments];
NSRange range = NSMakeRange(0, [fixedArguments count]);
va_list fakeArgList = (va_list)malloc(sizeof(NSString *) * [fixedArguments count]);
__unsafe_unretained id *ptr = (__unsafe_unretained id *)fakeArgList;
[fixedArguments getObjects:ptr range:range];
content = [[NSString alloc] initWithFormat:outputFormat
arguments:(va_list)fakeArgList];
free(fakeArgList);
Trình biên dịch phàn nàn với thông báo này trên dòng cast:
error: cast of a non-Objective-C pointer type 'va_list' (aka 'char *') to '__unsafe_unretained id *' is disallowed with ARC
chức năng getObjects:range:
được định nghĩa như sau:
- (void)getObjects:(id __unsafe_unretained [])objects range:(NSRange)range;
Tôi đã thử tất cả mọi thứ nhưng vẫn không thể loại bỏ lỗi này ...
Có giải pháp nào để tạo va_list
giả với ARC được bật không? Tôi đang làm gì sai?
Cảm ơn bạn rất nhiều ... Tôi đang xây dựng một cái nhìn bảng chọn mà đưa ra một plist chứa hàng loạt các từ điển, một định dạng in ấn, chúng ta hãy nói ' "(% @ -% @)% @"' và danh sách các phím điền vào chế độ xem bộ chọn với chuỗi được định dạng trích xuất dữ liệu từ tệp plist. Cách duy nhất tôi tìm thấy để sử dụng một định dạng in với một danh sách các đối số biến là giả mạo một va_list. Tôi biết nó không phải là lập trình rõ ràng nhưng tôi không thể đưa ra giải pháp tốt hơn, bất kỳ phương án hợp lệ nào thực sự được chào đón và tôi nghĩ tôi sẽ đăng một câu hỏi khác về vấn đề của tôi để tìm giải pháp sạch hơn. – Scakko
Nếu bạn luôn làm việc với% @ và không bao giờ có bất kỳ tham số có kích thước nào khác, bạn chỉ có thể tìm kiếm các trường hợp% @ trong chuỗi và thay thế chúng bằng [mô tả đối tượng] cho từng tham số của bạn. Hiệu ứng tương tự, không có va_list giả. Nhưng điều đó sẽ không hoạt động đối với định dạng số hoặc bất kỳ thứ gì khác, trừ khi bạn muốn làm nhiều việc hơn. – ipmcc
Tôi sẽ thử ngay hôm nay, cảm ơn bạn rất nhiều ... – Scakko