Question: I have to pass the following object to a method, have that method modify it so that after the method call I can move on with my modified object.

```
AVMutableCompositionTrack *compositionVideoTrack[2];

```

passing it like this currently:

```
[self buildShow:&compositionVideoTrack];

```

the buildshow method looks like this:

```
-(void)buildShow:(AVMutableCompositionTrack**)videoTracks{
}

```

I am getting this compiler warning and it is not currently working:

Incompatible pointer types sending 'AVMutableCompositionTrack \*\_\_strong (\*)[2]' to parameter of type 'AVMutableCompositionTrack \*\_\_autoreleasing \*'

How can I change this to make it work?

Answer: 
Just pass it like this:

```
[self buildShow:compositionVideoTrack];

```

When you declare it like this:

```
AVMutableCompositionTrack * __autoreleasing compositionVideoTrack[2];

```

It's already an array of pointers, so it's compatible with the type of the parameter (`AVMutableCompositionTrack**`).
Unless you're working with a property, you ought to do it like this (note that the method now returns the object of the same type):

method constructor:

```
-(AVMutableCompositionTrack *)buildShow:(AVMutableCompositionTrack *)videoTracks {
    // do something
    return newVideoTracks;
}

```

And, method call:

```
newVideoTracks = [self buildShow:compositionVideoTrack];

```

If you use a property, you can have a void method with no parameters.