#objective-c
#objective-c
Вопрос:
Я не смог использовать pData [4096], чтобы передать его другой функции из main.
data.m
------
@implementation data
static int msgID;
static char pData[4096]="";
(void)initialize
{
//some initialisations
msgID =123;
}
-(void)SwapEndian:(uint8_t*)pData withBOOLValue:(BOOL)bIsAlreadyLittleEndian
{
NSLog("%s %s",pData,bIsAlreadyLittleEndian);
}
@end
main.m
-------
[dat SwapEndian:dat.pData withBOOLValue:TRUE];
Я получаю необъявленные pData. Поскольку pData объявляется как статический внутри Данных
реализацию я пробовал с dat.pData, чтобы передать его из main.Но когда я делаю это, я получаю
Запрос для члена ‘pData’ со значением BOOL TRUE не является структурой или объединением.
Комментарии:
1. Вы не используете Objective-C так, как это предназначено для использования. Извините за прямоту, но я думаю, что такие вещи важно знать
:)
. Можете ли вы описать, чего вы пытаетесь достичь с помощью этого кода?2. @e.James: Буфер pData заполнен некоторыми значениями (такими как заголовок, данные и хвостовик) в функции, называемой DataBuffer класса ‘data’. Теперь мне нужно перевести весь буфер в формат Litte Indian. Итак, я написал функцию внутри класса для преобразования. Теперь изначально я просто проверяю, получаю ли я буфер pData со значениями, инициализированными функцией DataBuffer. Итак, как мне нужно передать pData из main.
Ответ №1:
Сложно определить, что должен делать код, но вот как создать объект Objective-C, который содержит целочисленный идентификатор и массив из 4096 символов. Пожалуйста, обратите внимание, что такого рода вещи обычно не поощряются. Если у вас нет действительно конкретной причины для использования int
и char[]
, идентификатор должен быть NSInteger
, а данные должны быть объектом NSData
or NSString
.
Я также использовал некоторые «стандартные» соглашения об именовании. Если вы пишете код Cocoa, это помогает выпить много Kool-Aid.
Message.h:
@interface Message : NSObject
{
int identifier;
char data[4096];
}
@property (nonatomic, assign) int indentifier;
@property (nonatomic, readonly) char * data;
- (void)swapEndian:(BOOL)flag;
@end
Message.m:
@implementation Message
@synthesize identifier;
@synthesize data;
- (id)init
{
if ((self = [super init]) == nil) { return nil; }
identifier = 0;
data[0] = '';
return self;
}
- (void)swapEndian:(BOOL)flag
{
NSLog(@"%s %d", data, flag);
}
@end
main.m:
#import "Message.h"
...
Message * message = [[[Message alloc] init] autorelease];
message.identifier = 123;
[message swapEndian:YES];
Комментарии:
1. ошибка: тип свойства ‘data’ не соответствует типу ivar ‘data’, который вводится в объявлении @synthesize data. У меня есть некоторое значение в буфере данных, которое инициализировано в func1 (), и мне нужно передать его функции swapEndians. Как передать этот буфер данных из main в функцию swapEndian