分配给' NSUInteger *' (又名' unsigned long *')来自不兼容的类型' const uint8_t * const' (又名' const unsigned char * const')

时间:2013-02-22 22:08:17

标签: objective-c variables methods

我对目标c的编程比较陌生,所以请不要因为这个问题而杀了我。 目前我正在开发一个小程序,它应该能够对mp4文件的id3标签进行一些更改。我已经植入了mp4v2库,现在我正在尝试编写一个读取特定文件的标签信息的方法。 我的问题是我无法将标签“contentRating”的值转换为NSUInteger var。库的引用说我得到这样的值:“const uint8_t *”。 但是我如何将它放入NSUInteger var? 非常感谢您的帮助!

继承我的代码:

- (void)getSongInfo:(NSString *)path
          title:(NSString *)t
          album:(NSString *)alb
         artist:(NSString *)art
         rating:(NSUInteger *)r
       albumart:(NSData *)aArt {

// Transform path in const char
const char *cPath = [path cStringUsingEncoding:NSASCIIStringEncoding];

// Load File
MP4FileHandle mp4File = MP4Modify(cPath);

// Create Tag var
const MP4Tags* tags = MP4TagsAlloc();

// Get Tags
MP4TagsFetch(tags, mp4File);

// Get Titel + Album + Interpret + Rating
t = [NSString stringWithUTF8String:tags->name];
alb = [NSString stringWithUTF8String:tags->album];
art = [NSString stringWithUTF8String:tags->artist];

r = tags->contentRating; <-- My Problem!

1 个答案:

答案 0 :(得分:1)

你可以这样做:

- (void)getSongInfo:(NSString *)path
      title:(NSString **)t
      album:(NSString **)alb
     artist:(NSString **)art
     rating:(NSUInteger *)r
   albumart:(NSData **)aArt {

 ...

// Get Titel + Album + Interpret + Rating
*t = [NSString stringWithUTF8String:tags->name];
*alb = [NSString stringWithUTF8String:tags->album];
*art = [NSString stringWithUTF8String:tags->artist];

*r = (NSUInteger)(*tags->contentRating); <-- My Problem!

您可以像这样调用此代码:

NSString* title = nil;
NSString* album = nil;
NSString* artist = nil;
NSUInteger rating = 0;
NSData* albumArt = nil;

[self getSongInfo:path title:&title album:&album artist:&artist rating:&rating albumArt:&albumArt];

尊重您的代码,我的代码包含两种更改:

  1. 参数通过引用传递(因此您可以将值“传回”给调用者);

  2. *contentRating正在被转换为正确的类型(因为NSUInteger大于uint8_t,此演员阵容不会出现任何问题。

  3. 另一方面,我强烈建议创建一个类来保存有关歌曲的信息:

    @interface MP3Info : NSObject
    @property (nonatomic, retain) NSString* title;
    ...
    @end
    

    并重新启动您的方法,如:

    - (MP3Info*)getSongInfo:(NSString *)path;
    

    希望它有所帮助。